1. 程式人生 > >Sql Server 獲取指定表、檢視結構

Sql Server 獲取指定表、檢視結構

1、獲取指定表、檢視的所有欄位屬性

只要輸入不同的表/檢視名,就可以獲取該表的所有欄位名字、欄位長度、欄位型別、欄位說明、欄位是否允許為空、是否主鍵、是否自增長欄位等。

USE [資料庫名稱]
GO

/****** Object:  StoredProcedure [dbo].[A_P_GetColumnStructureInfo]    Script Date: 11/19/2015 16:11:12 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[A_P_GetColumnStructureInfo]
    (     
      @tableName NVARCHAR(500) -- 表名     
	)
AS
    DECLARE @sqlTemp NVARCHAR(MAX); --查詢sql
    SET @sqlTemp = 'SELECT  syscolumns.name AS Code ,
        syscolumns.name AS Name ,
        IsPrimaryKey = CASE WHEN EXISTS ( SELECT    1
                                  FROM      sysobjects
                                            INNER JOIN sysindexes ON sysindexes.name = sysobjects.name
                                            INNER JOIN sysindexkeys ON sysindexes.id = sysindexkeys.id
                                                              AND sysindexes.indid = sysindexkeys.indid
                                  WHERE     xtype = ''PK''
                                            AND parent_obj = syscolumns.id
                                            AND sysindexkeys.colid = syscolumns.colid )
                    THEN 1
                    ELSE 0
               END ,
        systypes.name AS DataType ,
        syscolumns.length AS N''DataLength'',
        --sys.extended_properties.value AS Mark ,
        ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name, ''Scale''), 0) AS N''Pricision'' ,
        ISNULL(syscomments.text, '''') N''DefaultValue'' ,
        syscolumns.isnullable AS IsNotNull ,
        ''0'' AS N''IsUnique'' ,
        NEWID() AS N''id'' ,
        ''0'' AS N''IsSystem'' ,       
        IsIncrementColumn = CASE syscolumns.status
                       WHEN 128 THEN 1
                       ELSE 0
                     END,
         ISNULL(extended_properties.[value], '''') AS N''Remark'' ,
         ''0'' AS N''DataObjectId'',
         0 AS IdentityIncrement,
         0 AS IDENT_SEED
         
FROM    syscolumns
        INNER JOIN systypes ON ( syscolumns.xtype = systypes.xtype
                                 AND systypes.name <> ''_default_''
                                 AND systypes.name <> ''sysname''
                               )
        left join syscomments  on syscolumns.cdefault = syscomments.id 
        LEFT OUTER JOIN sys.extended_properties ON ( sys.extended_properties.major_id = syscolumns.id
                                                     AND minor_id = syscolumns.colid
                                                   )
                                                  
WHERE   syscolumns.id = ( SELECT    id
                          FROM      sysobjects
                          WHERE     name = '''
[email protected]
+''' ) ORDER BY syscolumns.colid; ' PRINT @sqlTemp; ------返回查詢結果----- EXEC sp_executesql @sqlTemp; GO

小注:

0 AS IdentityIncrement,
0 AS IDENT_SEED

這兩個是充數,想獲取真實值,請用2、3的函式

升級版(修改IsIncrementColumn列為bit型別):

USE [AMACDBtest]
GO

/****** Object:  StoredProcedure [dbo].[A_P_GetColumnStructureInfo]    Script Date: 11/20/2015 09:58:03 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



alter PROCEDURE [dbo].[A_P_GetColumnStructureInfo]
    (     
      @tableName NVARCHAR(MAX) -- 表名     
	)
AS
    DECLARE @sqlTemp NVARCHAR(MAX); --查詢sql
    SET @sqlTemp = 'SELECT  syscolumns.name AS Code ,
        syscolumns.name AS Name ,
        IsPrimaryKey = CASE WHEN EXISTS ( SELECT    1
                                  FROM      sysobjects
                                            INNER JOIN sysindexes ON sysindexes.name = sysobjects.name
                                            INNER JOIN sysindexkeys ON sysindexes.id = sysindexkeys.id
                                                              AND sysindexes.indid = sysindexkeys.indid
                                  WHERE     xtype = ''PK''
                                            AND parent_obj = syscolumns.id
                                            AND sysindexkeys.colid = syscolumns.colid )
                    THEN 1
                    ELSE 0
               END ,
        systypes.name AS DataType ,
        syscolumns.length AS N''DataLength'',
        --sys.extended_properties.value AS Mark ,
        ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name, ''Scale''), 0) AS N''Pricision'' ,
        ISNULL(syscomments.text, '''') N''DefaultValue'' ,
        syscolumns.isnullable AS IsNotNull ,
        ''0'' AS N''IsUnique'' ,
        NEWID() AS N''id'' ,
        ''0'' AS N''IsSystem'' ,       
        --IsIncrementColumn = CASE syscolumns.status
        --               WHEN 128 THEN 1
        --               ELSE 0
        --             END,
         IsIncrementColumn = cast(CASE syscolumns.status
                       WHEN 128 THEN 1
                       ELSE 0
                     END AS bit),
         ISNULL(extended_properties.[value], '''') AS N''Remark'' ,
         ''0'' AS N''DataObjectId'',
         0 AS IdentityIncrement,
         0 AS IDENT_SEED
         
FROM    syscolumns
        INNER JOIN systypes ON ( syscolumns.xtype = systypes.xtype
                                 AND systypes.name <> ''_default_''
                                 AND systypes.name <> ''sysname''
                               )
        left join syscomments  on syscolumns.cdefault = syscomments.id 
        LEFT OUTER JOIN sys.extended_properties ON ( sys.extended_properties.major_id = syscolumns.id
                                                     AND minor_id = syscolumns.colid
                                                   )
                                                  
WHERE   syscolumns.id = ( SELECT    id
                          FROM      sysobjects
                          WHERE     name = '''
[email protected]
+''' ) ORDER BY syscolumns.colid; ' PRINT @sqlTemp; ------返回查詢結果----- EXEC sp_executesql @sqlTemp; GO

2、獲取標識列的種子值(標識種子:指示標識列的初始行值。標識種子必須是  整數,位數等於或小於 10。)
可使用函式IDENT_SEED,用法:
SELECT IDENT_SEED ('表名')
3、獲取標識列的遞增量(標識增量:屬性指定在 Microsoft SQL Server 為插入的行生成標識值時,在現有的最大行標識值基礎上所加的值。標識增量必須是 非零 整數,位數等於或小於 10。)

可使用函式IDENT_INCR ,用法:

SELECT IDENT_INCR('表名')
4、待續



相關推薦

Sql Server 獲取指定檢視結構

1、獲取指定表、檢視的所有欄位屬性只要輸入不同的表/檢視名,就可以獲取該表的所有欄位名字、欄位長度、欄位型別、欄位說明、欄位是否允許為空、是否主鍵、是否自增長欄位等。USE [資料庫名稱] GO /*

Sql Server中判斷列不存在則創建的方法[轉]

where art number primary net index mman www tro 一、Sql Server中如何判斷表中某列是否存在 首先跟大家分享Sql Server中判斷表中某列是否存在的兩個方法,方法示例如下: 比如說要判斷表A中的字段C是否存在兩個

sql server 查看錶檢視觸發器儲存過程等組成sql查詢語句

1. 檢視使用者表 select name from sys.tables select name from sys.objects where type='U' select name from sysobjects where xtype='U'   其中type

SQL SERVER 建臨時迴圈插入資料遊標遍歷資料庫

create table #tmp (id int) --建立臨時資料表 declare @x int --迴圈插入資料 set @x=1 while @x<=10 begin insert into #tmp values(@x) set @[email&

SQL Server基礎(二)資料庫物件:檢視同義詞可程式設計性外部資源Service Broker儲存安全性 分別表示什麼意思

一、簡介        其幾天弄了個數據表,知道了資料表大概是怎麼回事。今天打算學習學習資料庫的儲存過程,於是發現, 儲存過程只是資料庫物件的一部分。我這個人比較喜歡從全域性認識一個事物,索性我就把資料物件全部羅列出來。 二、資料庫物件

C# 如何獲取SQL Server指定資料的所有欄位名和欄位型別

如何獲取指定資料表的所有欄位名和欄位型別。SqlConnection.GetSchema方法有2個過載形式,獲取指定資料表的所有欄位名和欄位型別的祕密就在GetSchema (String, String[])的第二個引數中。 定義如下: public override DataTable GetS

SQL Server復制結構數據生成新的語句

sdn 主鍵 .net 需要 topic 外鍵 server sql 表數據 參考:http://topic.csdn.net/t/20020621/09/820025.html SELECT * INTO newTableName FROM oldT

Sql Server無法修改結構

修改完表結構點儲存之後彈出錯誤提示:不允許儲存更改。您所做的更改要求刪除並重新建立以下表。您對無法重新建立的表進行了更改或者啟用了‘阻止儲存要求重新建立表的更改’選項   解決辦法:開啟sql server management studio--

sql server 查詢所有結構

SELECT CASE WHEN col.colorder = 1 THEN obj.name ELSE '' END AS 表名, Coalesce(epTwo.value, '') AS documentation, col.colorder AS 序號 , col.name AS 列名 , ISNULL

資料庫系統概論03-關係資料庫標準語言SQL&模式基本檢視操作&連線查詢刪改語句

3.1關係資料庫標準語言SQL (Structured Query Language )結構化查詢語言 資料查詢:SELECT 資料定義:CREATE\DROP 資料操縱:INSERT\UPDATE\DELETE 資料控制:GRANT\REVOKE 3.1.1 資料定義

SQL Server獲取結構及生成結構SQL語句

1.顯示所有資料庫(非系統建立) SELECT name FROM master..sysdatabases WHERE name NOT IN ( 'master', 'model', 'msdb', 'tempdb', 'northwind','pubs') 2.顯示某個

Oracle和sql server中複製結構資料的sql語句

 在Oracle和sql server中,如何從一個已知的舊錶,來複制新生成一個新的表,如果要複製舊錶結構和表資料,對應的sql語句該如何寫呢?剛好阿堂這兩天用到了,就順便把它收集彙總一下,供朋友們參考一下了! sql server中複製表結構和表資料的sql語句的寫法,分別如下1.複製表的內容到

SQL Server 索引和體系結構(非聚集索引)

非聚集索引 概述      對於非聚集索引,涉及的資訊要比聚集索引更多一些,由於整個篇幅比較大涉及接下來的要寫的“包含列的索引”,“索引碎片”等一些知識點,可能要結合起來閱讀理解起來要更容易一些。非聚集索引和聚集索引一樣都是B-樹結構,但是非聚集索引不改變資料的儲存方式,所以一個表允許建多個非聚集索引;非

SQL Server 索引和體系結構(聚集索引)

聚集索引 概述       關於索引和表體系結構的概念一直都是討論比較多的話題,其中表的各種儲存形式是討論的重點,在各個網站上面也有很多關於這方面寫的不錯的文章,我寫這篇文章的目的也是為了將所有的知識點儘可能的組織起來結合自己對這方面的瞭解些一篇關於的詳細文章出來,同時也會列出一些我自己有疑惑的地方拿出來

利用DBCC PAGE檢視SQL Server中的和索引資料

1.DBCC IND跟DBCC PAGE簡介 1.1.DBCC IND命令 DBCC IND ( { 'dbname' | dbid }, { 'objname' | objid }, { nonclustered indid | 1 | 0 | -1 | -

SQL Server指定資料庫下 建立(操作)

在MySQL中,是使用 insert 資料庫名.表名 這樣子操作。 SQL Server是如下 指定資料庫下建立表 use test1 GO create table SC ( sno CHA

sql server 查詢資料庫結構

select b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_id and a.column_id=b.mi

SQL Server 索引和體系結構(包含列索引)

包含列索引 概述 包含列索引也是非聚集索引,索引結構跟聚集索引結構是一樣,有一點不同的地方就是包含列索引的非鍵列只儲存在葉子節點;包含列索引的列分為鍵列和非鍵列,所謂的非鍵列就是INCLUDE中包含的列,至少需要有一個鍵列,且鍵列和非鍵列不允許重複,非鍵列最多允許1023列(也就是表的最多列-1),由於索

Sql Server查詢指定範圍(一週一月本週本月等)內的資料

查詢當天日期在一週年的資料 select*fromShopOrderwhere datediff(week,ordTime,getdate()-1)=0 查詢當天的所有資料 select*fromShopO

SQL語句行列轉換(附帶資料庫檢視操作)

本來只是想解決怎麼把資料的行和列進行轉換的,但最近覺得一些資料庫SQL語句的操作,很久沒用了,有點陌生。所以也就隨筆記錄一些簡單但很基本的操作。 我的資料庫是MSSQL2005. 第一部分主要的操作包含:資料庫的建立、刪除,表的增、刪、改,表中資料的增、刪、改、查,檢