收藏幾段SQL Server語句和存儲過程

          (轉載自--http://www.cnblogs.com/qiubole/articles/157309.html)


          -- ======================================================

          --列出SQL SERVER 所有表,字段名,主鍵,類型,長度,小數位數等信息

          --在查詢分析器里運行即可,可以生成一個表,導出到EXCEL中

          -- ======================================================

          SELECT

          ?????? (case when a.colorder=1 then d.name else '' end)表名,

          ?????? a.colorder 字段序號,

          ?????? a.name 字段名,

          ?????? (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 標識,

          ?????? (case when (SELECT count(*)

          ?????? FROM sysobjects

          ?????? WHERE (name in

          ???????????????? (SELECT name

          ??????????????? FROM sysindexes

          ??????????????? WHERE (id = a.id) AND (indid in

          ????????????????????????? (SELECT indid

          ???????????????????????? FROM sysindexkeys

          ???????????????????????? WHERE (id = a.id) AND (colid in

          ?????????????????????????????????? (SELECT colid

          ????????????????????????????????? FROM syscolumns

          ????????????????????????????????? WHERE (id = a.id) AND (name = a.name))))))) AND

          ????????????? (xtype = 'PK'))>0 then '√' else '' end) 主鍵,

          ?????? b.name 類型,

          ?????? a.length 占用字節數,

          ?????? COLUMNPROPERTY(a.id,a.name,'PRECISION') as 長度,

          ?????? isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小數位數,

          ?????? (case when a.isnullable=1 then '√'else '' end) 允許空,

          ?????? isnull(e.text,'') 默認值,

          ?????? isnull(g.[value],'') AS 字段說明???

          ?

          FROM? syscolumns? a left join systypes b

          on? a.xtype=b.xusertype

          inner join sysobjects d

          on a.id=d.id? and? d.xtype='U' and? d.name<>'dtproperties'

          left join syscomments e

          on a.cdefault=e.id

          left join sysproperties g

          on a.id=g.id AND a.colid = g.smallid?

          order by a.id,a.colorder

          -------------------------------------------------------------------------------------------------

          ?

          ?

          ?

          ?

          ?

          ?

          列出SQL SERVER 所有表、字段定義,類型,長度,一個值等信息

          并導出到Excel 中

          -- ======================================================

          -- Export all user tables definition and one sample value

          -- jan-13-2003,Dr.Zhang

          -- ======================================================

          在查詢分析器里運行:

          SET ANSI_NULLS OFF

          GO

          SET NOCOUNT ON

          GO

          ?

          SET LANGUAGE 'Simplified Chinese'

          go

          DECLARE @tbl nvarchar(200),@fld nvarchar(200),@sql nvarchar(4000),@maxlen int,@sample nvarchar(40)

          ?

          SELECT d.name TableName,a.name FieldName,b.name TypeName,a.length Length,a.isnullable IS_NULL INTO #t

          FROM? syscolumns? a,? systypes b,sysobjects d?

          WHERE? a.xtype=b.xusertype? and? a.id=d.id? and? d.xtype='U'

          ?

          DECLARE read_cursor CURSOR

          FOR SELECT TableName,FieldName FROM #t

          ?

          SELECT TOP 1 '_TableName???????????????????? ' TableName,

          ??????????? 'FieldName????????????????????? ' FieldName,'TypeName???????????? ' TypeName,

          ??????????? 'Length' Length,'IS_NULL' IS_NULL,

          ??????????? 'MaxLenUsed' AS MaxLenUsed,'Sample Value????????? ' Sample,

          ???????????? 'Comment?? ' Comment INTO #tc FROM #t

          ?

          OPEN read_cursor

          ?

          FETCH NEXT FROM read_cursor INTO @tbl,@fld

          WHILE (@@fetch_status <> -1)? --- failes

          BEGIN

          ?????? IF (@@fetch_status <> -2) -- Missing

          ?????? BEGIN

          ????????????? SET @sql=N'SET @maxlen=(SELECT max(len(cast('+@fld+' as nvarchar))) FROM '+@tbl+')'

          ????????????? --PRINT @sql

          ????????????? EXEC SP_EXECUTESQL @sql,N'@maxlen int OUTPUT',@maxlen OUTPUT

          ????????????? --print @maxlen

          ????????????? SET @sql=N'SET @sample=(SELECT TOP 1 cast('+@fld+' as nvarchar) FROM '+@tbl+' WHERE len(cast('+@fld+' as nvarchar))='+convert(nvarchar(5),@maxlen)+')'

          ????????????? EXEC SP_EXECUTESQL @sql,N'@sample varchar(30) OUTPUT',@sample OUTPUT

          ????????????? --for quickly??

          ????????????? --SET @sql=N'SET @sample=convert(varchar(20),(SELECT TOP 1 '+@fld+' FROM '+

          ???????????????????? --@tbl+' order by 1 desc ))'?

          ????????????? PRINT @sql

          ????????????? print @sample

          ????????????? print @tbl

          ????????????? EXEC SP_EXECUTESQL @sql,N'@sample nvarchar(30) OUTPUT',@sample OUTPUT

          ????????????? INSERT INTO #tc SELECT *,ltrim(ISNULL(@maxlen,0)) as MaxLenUsed,

          ???????????????????? convert(nchar(20),ltrim(ISNULL(@sample,' '))) as Sample,' ' Comment FROM #t where TableName=@tbl and FieldName=@fld

          ?????? END

          ?????? FETCH NEXT FROM read_cursor INTO @tbl,@fld

          END

          ?

          CLOSE read_cursor

          DEALLOCATE read_cursor

          GO

          ?

          SET ANSI_NULLS ON

          GO

          SET NOCOUNT OFF

          GO

          select count(*)? from #t

          DROP TABLE #t

          GO

          ?

          select count(*)-1? from #tc

          ?

          select * into ##tx from #tc order by tablename

          DROP TABLE #tc

          ?

          --select * from ##tx

          ?

          declare @db nvarchar(60),@sql nvarchar(3000)

          set @db=db_name()

          --請修改用戶名和口令 導出到Excel 中

          set @sql='exec master.dbo.xp_cmdshell ''bcp ..dbo.##tx out c:\'+@db+'_exp.xls -w -C936 -Usa -Psa '''

          print @sql

          exec(@sql)

          GO

          DROP TABLE ##tx

          GO

          ?

          ?

          ?

          -- ======================================================

          --根據表中數據生成insert語句的存儲過程

          --建立存儲過程,執行 spGenInsertSQL 表名

          --感謝playyuer

          -- ======================================================

          CREATE?? proc spGenInsertSQL (@tablename varchar(256))

          ?

          as

          begin

          ? declare @sql varchar(8000)

          ? declare @sqlValues varchar(8000)

          ? set @sql =' ('

          ? set @sqlValues = 'values (''+'

          ? select @sqlValues = @sqlValues + cols + ' + '','' + ' ,@sql = @sql + '[' + name + '],'

          ??? from

          ??????? (select case

          ????????????????? when xtype in (48,52,56,59,60,62,104,106,108,122,127)???????????????????????????????

          ?????????????????????? then 'case when '+ name +' is null then ''NULL'' else ' + 'cast('+ name + ' as varchar)'+' end'

          ????????????????? when xtype in (58,61)

          ?????????????????????? then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast('+ name +' as varchar)'+ '+'''''''''+' end'

          ???????????????? when xtype in (167)

          ?????????????????????? then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'

          ????????????????? when xtype in (231)

          ?????????????????????? then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'

          ????????????????? when xtype in (175)

          ?????????????????????? then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar)? + '))+'''''''''+' end'

          ????????????????? when xtype in (239)

          ?????????????????????? then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar)? + '))+'''''''''+' end'

          ????????????????? else '''NULL'''

          ??????????????? end as Cols,name

          ?????????? from syscolumns?

          ????????? where id = object_id(@tablename)

          ??????? ) T

          ? set @sql ='select ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' from '+@tablename

          ? --print @sql

          ? exec (@sql)

          end

          ?

          GO

          ?

          ?

          ?

          -- ======================================================

          --根據表中數據生成insert語句的存儲過程

          --建立存儲過程,執行 proc_insert 表名

          --感謝Sky_blue

          -- ======================================================

          ?

          CREATE proc proc_insert (@tablename varchar(256))

          as

          begin

          ?????? set nocount on

          ?????? declare @sqlstr varchar(4000)

          ?????? declare @sqlstr1 varchar(4000)

          ?????? declare @sqlstr2 varchar(4000)

          ?????? select @sqlstr='select ''insert '+@tablename

          ?????? select @sqlstr1=''

          ?????? select @sqlstr2=' ('

          ?????? select @sqlstr1= ' values ( ''+'

          ?????? select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case

          --???? when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

          ?????? when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end'

          ?????? when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

          ?????? when a.xtype =61? then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

          ?????? when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

          ?????? when a.xtype =62? then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

          ?????? when a.xtype =56? then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end'

          ?????? when a.xtype =60? then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'

          ?????? when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

          ?????? when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

          ?????? when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

          ?????? when a.xtype =59? then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

          ?????? when a.xtype =58? then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

          ?????? when a.xtype =52? then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end'

          ?????? when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'

          ?????? when a.xtype =48? then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end'

          --???? when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

          ?????? when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

          ?????? else '''NULL'''

          ?????? end as col,a.colid,a.name

          ?????? from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and? a.xtype <>36

          ?????? )t order by colid

          ??????

          ?????? select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename

          --? print @sqlstr

          ?????? exec( @sqlstr)

          ?????? set nocount off

          end

          GO



          posted on 2006-08-07 12:05 nbt 閱讀(316) 評論(0)  編輯  收藏 所屬分類: 數據庫技術

          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Java技術網站

          友情鏈接

          國內一些開源網站

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黑龙江省| 温宿县| 包头市| 文山县| 保德县| 宁化县| 永城市| 南安市| 岳普湖县| 富源县| 万山特区| 辉县市| 巨野县| 卢龙县| 潢川县| 中卫市| 玉环县| 梁河县| 潞城市| 荆门市| 贵港市| 边坝县| 阳高县| 全南县| 新乡市| 云安县| 南木林县| 桦南县| 肇源县| 台州市| 宣化县| 霍州市| 青河县| 晴隆县| 贺州市| 松阳县| 定西市| 固始县| 酉阳| 昭觉县| 保德县|