|
- CREATEPROCEDUREdbo.UspOutputData
- @tablenamesysname
- AS
- declare@columnvarchar(1000)
- declare@columndatavarchar(1000)
- declare@sqlvarchar(4000)
- declare@xtypetinyint
- declare@namesysname
- declare@objectIdint
- declare@objectnamesysname
- declare@identint
- setnocounton
- set@objectId=object_id(@tablename)
- if@objectIdisnull--判断对象是否存在
- begin
- print'Theobjectnotexists'
- return
- end
- set@objectname=rtrim(object_name(@objectId))
- if@objectnameisnullorcharindex(@objectname,@tablename)=0--此判断不严密
- begin
- print'objectnotincurrentdatabase'
- return
- end
- ifOBJECTPROPERTY(@objectId,'IsTable')<>1--判断对象是否是table
- begin
- print'Theobjectisnottable'
- return
- end
- select@ident=status&0x80fromsyscolumnswhereid=@objectidandstatus&0x80=0x80
- if@identisnotnull
- print'SETIDENTITY_INSERT'+@TableName+'ON'
- declaresyscolumns_cursorcursor
- forselectc.name,c.xtypefromsyscolumnscwherec.id=@objectidorderbyc.colid
- opensyscolumns_cursor
- set@column=''
- set@columndata=''
- fetchnextfromsyscolumns_cursorinto@name,@xtype
- while@@fetch_status<>-1
- begin
- if@@fetch_status<>-2
- begin
- if@xtypenotin(189,34,35,99,98)--timestamp不需处理,image,text,ntext,sql_variant暂时不处理
- begin
- set@column=@column+casewhenlen(@column)=0then''else','end+@name
- set@columndata=@columndata+casewhenlen(@columndata)=0then''else','','','
- end
- +casewhen@xtypein(167,175)then'''''''''+'+@name+'+'''''''''--varchar,char
- when@xtypein(231,239)then'''N''''''+'+@name+'+'''''''''--nvarchar,nchar
- when@xtype=61then'''''''''+convert(char(23),'+@name+',121)+'''''''''--datetime
- when@xtype=58then'''''''''+convert(char(16),'+@name+',120)+'''''''''--smalldatetime
- when@xtype=36then'''''''''+convert(char(36),'+@name+')+'''''''''--uniqueidentifier
- else@nameend
- end
- end
- fetchnextfromsyscolumns_cursorinto@name,@xtype
- end
- closesyscolumns_cursor
- deallocatesyscolumns_cursor
- set@sql='setnocountonselect''insert'+@tablename+'('+@column+')values(''as''--'','+@columndata+','')''from'+@tablename
- print'--'+@sql
- exec(@sql)
- if@identisnotnull
- print'SETIDENTITY_INSERT'+@TableName+'OFF'
- GO
CREATEPROCEDUREdbo.UspOutputData
@tablenamesysname
AS
declare@columnvarchar(1000)
declare@columndatavarchar(1000)
declare@sqlvarchar(4000)
declare@xtypetinyint
declare@namesysname
declare@objectIdint
declare@objectnamesysname
declare@identint
setnocounton
set@objectId=object_id(@tablename)
if@objectIdisnull--判断对象是否存在
begin
print'Theobjectnotexists'
return
end
set@objectname=rtrim(object_name(@objectId))
if@objectnameisnullorcharindex(@objectname,@tablename)=0--此判断不严密
begin
print'objectnotincurrentdatabase'
return
end
ifOBJECTPROPERTY(@objectId,'IsTable')<>1--判断对象是否是table
begin
print'Theobjectisnottable'
return
end
select@ident=status&0x80fromsyscolumnswhereid=@objectidandstatus&0x80=0x80
if@identisnotnull
print'SETIDENTITY_INSERT'+@TableName+'ON'
declaresyscolumns_cursorcursor
forselectc.name,c.xtypefromsyscolumnscwherec.id=@objectidorderbyc.colid
opensyscolumns_cursor
set@column=''
set@columndata=''
fetchnextfromsyscolumns_cursorinto@name,@xtype
while@@fetch_status<>-1
begin
if@@fetch_status<>-2
begin
if@xtypenotin(189,34,35,99,98)--timestamp不需处理,image,text,ntext,sql_variant暂时不处理
begin
set@column=@column+casewhenlen(@column)=0then''else','end+@name
set@columndata=@columndata+casewhenlen(@columndata)=0then''else','','','
end
+casewhen@xtypein(167,175)then'''''''''+'+@name+'+'''''''''--varchar,char
when@xtypein(231,239)then'''N''''''+'+@name+'+'''''''''--nvarchar,nchar
when@xtype=61then'''''''''+convert(char(23),'+@name+',121)+'''''''''--datetime
when@xtype=58then'''''''''+convert(char(16),'+@name+',120)+'''''''''--smalldatetime
when@xtype=36then'''''''''+convert(char(36),'+@name+')+'''''''''--uniqueidentifier
else@nameend
end
end
fetchnextfromsyscolumns_cursorinto@name,@xtype
end
closesyscolumns_cursor
deallocatesyscolumns_cursor
set@sql='setnocountonselect''insert'+@tablename+'('+@column+')values(''as''--'','+@columndata+','')''from'+@tablename
print'--'+@sql
exec(@sql)
if@identisnotnull
print'SETIDENTITY_INSERT'+@TableName+'OFF'
GO
|
|
|