加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

收藏几段SQL Server语句和存储过程

发布时间:2020-12-12 16:02:42 所属栏目:MsSql教程 来源:网络整理
导读:-- ?====================================================== -- 列出SQL?SERVER?所有表,字段名,主键,类型,长度,小数位数等信息 -- 在查询分析器里运行即可,可以生成一个表,导出到EXCEL中 -- ?=====================================================

-- ?======================================================


-- 列出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, ' PRECISION ' )? as ?长度,


???????
isnull ( COLUMNPROPERTY (a.id, ' 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),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.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),2) ' + ' ?end '


???????
when ?a.xtype? = 58 ?? then ? ' case?when? ' + a.name + ' ?is?null?then? '' NULL '' ?else? ' + ''''''''' + ' + ' convert(varchar(23),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.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

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读