システムテーブルに関連するSQL文

- ================================================ ======
- リストの SQL Serverの  すべてのテーブル、フィールド名、主キー、タイプ、長さ、スケール、およびその他の情報
- クエリアナライザで実行することができ あなたがテーブルを生成することができ、への輸出 EXCEL
- ================================================ ======
SELECT
       (= 1 a.colorder次いで他にd.nameケース'末端) 表名、
       a.colorderの  フィールド番号、
       a.name  フィールド名、
       (ケース場合COLUMNPROPERTY(a.id、a.name、 'IsIdentity')= 1、次いで' √'else'末端)标识、
       (ケース際(SELECT COUNT(*)
       sysobjects FROM
       WHERE(名前に
                 (SELECT名前
                sysindexesのFROM
                WHERE(ID = a.id)AND(indidがで
                          (indidがSELECT
                         sysindexkeys FROM
                         WHERE(ID = a.id)AND(たcolidで
                                   (SELECTたcolid
                                  SYSCOLUMNS FROM
                                  WHERE(ID = a.id)AND(名= a.name)))))))AND
              (XTYPE = 'PK'))> 0、次いで' √'そう'末端)主键、
       b.nameの  タイプ、
       a.lengthは  、バイト数を占めています
       COLUMNPROPERTY(a.id、a.name、 'PRECISION')  长度、
       ISNULL(COLUMNPROPERTY(a.id、a.name、  'スケール')、0)として小数点以下の桁、
       (ケース1 = a.isnullable次いで' √'else'末端)允许空、
       ISNULL(e.text、 '')  のデフォルト値は、
       ISNULL(G。[値]、  AS '') フィールド説明    
 
SYSCOLUMNSから左にはsystypesにbを参加します
a.xtype = b.xusertypeに
インナーは、Dのsysobjectsに参加します
上のa.id = d.idとd.xtype = 'U' とd.name <> 'dtproperties'
左syscommentsのEに参加
a.cdefault = e.idに
左syspropertiesグラムに参加
a.id = g.id AND a.colid = g.smallidに 
a.id、a.colorderによって順序
-------------------------------------------------- -----------------------------------------------
 
 
 
 
 
 
リスト SQL Serverの  すべてのテーブル、フィールド定義、種類、長さ、値など
そしてへのエクスポート エクセル 
- ================================================ ======
- すべてのユーザー表の定義と一つのサンプル値をエクスポートします。
- 1月-13-2003、Dr.Zhang
- ================================================ ======
クエリアナライザで実行します。
SETは、OFF ANSI_NULLS
GO
NOCOUNT ON SET
GO
 
SET LANGUAGEの「簡体字中国語」
行きます
@tbl NVARCHAR(200)を宣言、FLDデータ型はnvarchar(200)@、SQLのデータ型はnvarchar(4000)@、@ MAXLENのint、@サンプルのデータ型はnvarchar(40)
 
#tをINTO SELECT d.nameのテーブル名、フィールド名a.name、b.name型名、a.length長、a.isnullable IS_NULL
SYSCOLUMNS、systypesにBから、dはSYSOBJECTS 
a.xtype = b.xusertypeとa.id = d.idとd.xtype = 'U'
 
read_cursor CURSORを宣言
#tをFROM SELECTテーブル名、フィールド名FOR
 
TOP 1 '_TableName SELECT                      'テーブル名を
            「フィールド名」フィールド名、「型名」型名、
            '長さ' 長、 'IS_NULL' IS_NULL、
            MaxLenUsed AS 'MaxLenUsed'、 'サンプル値' サンプル、
             'コメント' #tをFROM #tc INTOコメント
 
OPEN read_cursor
 
@ TBL、@ FLD INTO NEXT read_cursorからのフェッチ
WHILE(@@ FETCH_STATUS <> -1)--- failes
ベギン
       IF(@@ FETCH_STATUS <> -2) - ミッシング
       ベギン
              SETする@ SQL = N'SET @ MAXLEN =「( '+ @ TBL +' FROM MAX(LEN(キャスト(nvarchar型として '+ @ FLD +を')))SELECT)
              --print @sql
              EXEC sp_executesqlをする@ SQL、N MAXLEN OUTPUT @ '@のmaxlen int型OUTPUT'、
              --print @maxlen
              SETの@ SQL = N'SETする@サンプルは=(LEN(CAST(nvarchar型として '+ @ FLD +'))= 'が+変換 '+ @ TBL +'(NVARCHAR FROM NVARCHARとして( '+ @ FLD +')TOP 1キャストを選択します(5)、@ MAXLEN)+ ')'
              EXEC sp_executesqlをする@ SQL、N '@サンプルVARCHAR(30)OUTPUT'、@サンプル出力
              迅速--for  
              --set SQL = N'SETする@サンプル@ =変換(VARCHAR(20)、(TOP SELECT 1 '+ @ FLD +' から「+
                     - @ TBL + 1 'DESC順))' 
              PRINTの@sql
              印刷@sample
              印刷@tbl
              EXEC sp_executesqlをする@ SQL、N '@サンプルNVARCHAR(30)OUTPUT'、@サンプル出力
              INSERT INTO SELECTを#tc *、LTRIM(ISNULL(@ MAXLEN、0))MaxLenUsedとして、
                     #tを変換元(NCHAR(20)、LTRIM(ISNULL(@sample、 ' ')))試料として、'' コメントここでのTableName = @ TBLとフィールド名= @ FLD
       終わり
       @ TBL、@ FLD INTO NEXT read_cursorからのフェッチ
終わり
 
CLOSE read_cursor
DEALLOCATE read_cursor
GO
 
SETは、ON ANSI_NULLS
GO
SET NOCOUNT OFF
GO
SELECT COUNT(*)に#tから
DROPテーブル#tを
GO
 
SELECT COUNT(*) - 1 #tcから
 
テーブル名によって#tc注文から## TXに選択*
DROPテーブル#tc
 
--select * TX ##から
 
SQLデータ型はnvarchar @ @Dbデータ型はnvarchar(60)、(3000)を宣言
(DB = db_nameを@に設定)
-ユーザー名とパスワードを変更する にエクスポートするエクセル    
セットする@ SQL = 'execをmaster.dbo.xp_cmdshell '' のBCP ..dbo ## CをTX:。' + @デシベル+ '\ _ -C936 -Usa -Psa -w exp.xls '''
印刷@sql
EXEC(@sql)
GO
DROP TABLEの## TX
GO
 
 
 
- ================================================ ======
- 表内の生成データを 挿入する ストアドプロシージャステートメントを
- ストアドプロシージャの確立が実行される spGenInsertSQLテーブル
- 感謝 playyuer
- ================================================ ======
CREATE    のproc spGenInsertSQL(@tablenameのVARCHAR(256))
 
として
ベギン
 @sql VARCHAR(8000)を宣言
 宣言@sqlValuesのVARCHAR(8000)
 '(' @sql =設定
 セット@sqlValuesの= '値( '+'
 '@sqlValues = @sqlValues + colsの+ '+ ''、' '+'、SQL @ = @sql + '[' +名+]を' を選択
    から
        (ケースを選択
                  中ときXTYPE(48,52,56,59,60,62,104,106,108,122,127)                               
                       し、「ケース 『+名+』がnullである 『』 NULL」「他の 『+『キャスト+ 『終了』(』+名+』 varchar型として」)
                  中ときXTYPE(58,61)
                       し、 'ケース '+名+' がnullである '' NULL' '他の '+' '' '' '' '' + '+ 'キャスト(' +名+' varchar型など) '+ '+''' 「」「」「」+「」末端
                 (167)でときXTYPE
                       その後、+名+が 'NULL ' 'ヌルである'' ケース' '他の '+' '' '' '' '' + '+ +名+ '(置き換えます''、 '' '' '''、 '' ' ')' '' '' ''' + '+' '' '' '' '+' '' 末端
                  (231)における場合XTYPE
                        その後、+名+が 'NULL ''ヌルである'' の場合は」他 '+' '' N '' '' '' + '+ '' +名+'(置き換え、 '' '' '' ''、 ' ') ' '' '' '''' + '+' '' '' '' '+''「末端
                  (175)でときXTYPE
                       その後、 'ケースはとき '+名+ 'NULL'」他の '+' '' '' '' '' + '+ 'キャスト((置き換える' +名+'、 '' '' '' ''' は、nullです' '' '' '' '' '' ''(+キャスト(VARCHARとして長さ)+ '))+' '' '' '' '' + '末端」charとして)'
                  (239)でときXTYPE
                       その後、+名+は+ ' '他' 'NULL ' 'ヌルである'' ケース' '' N '' '' '' + '+ 'キャスト((' +名+' 置き換え、 '' '' ''' ' '' '' 'CHAR(' + CAST(VARCHARとして長さ)+ '))として) '' '' ''' +' '' '' '' '' + '' 末端
                  他の「」「NULL」「」
                Colsは、名前のように末尾
           SYSCOLUMNSから 
          ID = OBJECT_ID(@tablename)
        )T
 セット@sqlは= 'INSERT INTO [ '+ @tablename +']を' 選択 '' 左+(SQL @、LEN(@sql)-1)+ ')' +左(@ sqlValues、LEN(@sqlValues)-4 )+ ')' '' + @テーブル名から
 --print @sql
 EXEC(@sql)
終わり
 
GO
 
 
 
- ================================================ ======
- 表内の生成データを 挿入する ストアドプロシージャステートメントを
- ストアドプロシージャの確立が実行される proc_insertテーブル
- 感謝 Sky_blueを
- ================================================ ======
 
proc proc_insertをCREATE(@tablenameのVARCHAR(256))
として
ベギン
       NOCOUNTの設定
       @sqlstr VARCHAR(4000)を宣言
       sqlstr1のVARCHAR(4000)@を宣言
       sqlstr2のVARCHAR(4000)@を宣言
       @ sqlstr = 'を選択し '選択' + @テーブル名' を挿入
       選択@ sqlstr1 = ''
       '(' @ sqlstr2 =選択
       @ sqlstr1 = '値( '' +' を選択
       (から '' @ sqlstr1 = @ sqlstr1 + COL + '+' ' '' +'、@ sqlstr2 = @ sqlstr2 +名+を選択するケースを選択
-      場合a.xtype + = 173次いで+ a.name + 'NULL ' 'ヌルである''の場合' '他の'+変換(VARCHAR(4)、a.length * 2 + 2'(VARCHAR(変換' )+ ')、' + a.name + ')' + ''末端
       +ついで+ a.name + 'NULL 'がNULLである'' の場合 ' 'そう 'a.xtype = 104'(+ a.name + + '末端' VARCHAR(1) ')' に変換' とき
       = 175 a.xtypeは、+ a.name + 'NULL ' 'ヌルである'' ケース' '他の '+' '' '' '' '' + '+ '' + a.name +'(置き換える' とき'' ' ' ' ''' ''' ' ''' '')' + '+' '' '' '' '' + '' 末端
       a.xtypeは= 61、次いで+ a.name + 'NULL ''ヌルである'' の場合は、 'そう '+' '' '' '' '+' + 'ときに+ A'、(VARCHAR(23)に変換' .nameの+ '121) '+ '+'' '' '' '' '+' 末端'
       +ついで+ a.name + 'NULL 'がNULLである'' の場合 '」そう 'a.xtype = 106 +変換(VARCHAR(4)、a.xprec + 2)+ ')'(VARCHAR(変換' とき、 '+ a.name +') '+'「末端
       a.xtype = 62、次いで 'ケース '+ a.name +' がヌルである '' NULL' '他の '+' に変換(VARCHAR(23)、 '+ a.name +'、2) '+' 末端'
       a.xtypeは= 56、次いで 'の場合は、ときに '+ a.name + 'NULL' '他の '+' に変換(VARCHAR(11) '+ a.name +') '+' 末端'' はヌルである' 場合
       a.xtypeは= 60、次いで 'の場合は、ときに '+ a.name + 'NULL' '他の '+' に変換(VARCHAR(22) '+ a.name +') '+' 末端'' はヌルである' 場合
       = 239 a.xtypeは、+ a.name + 'NULL ' 'ヌルである'' ケース' '他の '+' '' '' '' '' + '+ '' + a.name +'(置き換える' とき'' ' ' ' ''' ''' ' ''' '')' + '+' '' '' '' '' + '' 末端
       +ついで+ a.name + 'NULL 'がNULLである'' の場合 '」そう 'a.xtype = 108 +変換(VARCHAR(4)、a.xprec + 2)+ ')'(VARCHAR(変換' とき、 '+ a.name +') '+'「末端
       = 231 a.xtypeは、+ a.name + 'NULL ' 'ヌルである'' ケース' '他の '+' '' '' '' '' + '+ '' + a.name +'(置き換える' とき'' ' ' ' ''' ''' ' ''' '')' + '+' '' '' '' '' + '' 末端
       a.xtype = 59、次いで 'ケース '+ a.name +' がヌルである '' NULL' '他の '+' に変換(VARCHAR(23)、 '+ a.name +'、2) '+' 末端'
       a.xtypeは= 58、次いで+ a.name + 'NULL ''ヌルである'' の場合は、 'そう '+' '' '' '' '+' + 'ときに+ A'、(VARCHAR(23)に変換' .nameの+ '121) '+ '+'' '' '' '' '+' 末端'
       a.xtypeは= 52、次いで 'の場合は、ときに '+ a.name + 'NULL' '他の '+' に変換(VARCHAR(12) '+ a.name +') '+' 末端'' はヌルである' 場合
       a.xtype = 122は、次いで、 '場合は、いつ '+ a.name + 'NULL' '他の '+' に変換(VARCHAR(22) '+ a.name +') '+' 末端'' はヌルである' 場合
       a.xtype + = 48、次いで+ a.name + 'NULL 'がNULLである'' の場合 ' 'そう '' は(+ a.name + + '末端' VARCHAR(6)、 '')に変換' とき
-      場合a.xtype + = 165次いで+ a.name + 'NULL ' 'ヌルである''の場合' '他の'+変換(VARCHAR(4)、a.length * 2 + 2'(VARCHAR(変換' )+ ')、' + a.name + ')' + ''末端
       = 167 a.xtypeは、+ a.name + 'NULL ' 'ヌルである'' ケース' '他の '+' '' '' '' '' + '+ '' + a.name +'(置き換える' とき'' ' ' ' ''' ''' ' ''' '')' + '+' '' '' '' '' + '' 末端
       他の「」「NULL」「」
       COL、a.colid、a.nameとして終了
       SYSCOLUMNSここa.id = OBJECT_ID(@tablename)とa.xtype <> 189とa.xtype <> 34とa.xtype <> 35とa.xtype <> 36から
       たcolidによる)T順序
      
       @ sqlstr = @ sqlstr +左(@ sqlstr2、LEN(@ sqlstr2)-1)+ ') '+左(@ sqlstr1、LEN(@ sqlstr1)-3)+') 'から' + @テーブル名を選択
- 印刷@sqlstr
       EXEC(@sqlstr)
       NOCOUNTオフに設定
終わり
GO

ます。https://www.cnblogs.com/zhangchenliang/archive/2010/01/10/1643674.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34067049/article/details/93495992