將表資料生成SQL指令碼的儲存過程

2021-04-08 18:06:15 字數 2682 閱讀 4263

將表資料生成sql指令碼的儲存過程

將表資料生成sql指令碼的儲存過程:

create procedure dbo.uspoutputdata 

@tablename sysname 

as declare @column varchar(1000) 

declare @columndata varchar(1000) 

declare @sql varchar(4000) 

declare @xtype tinyint 

declare @name sysname 

declare @objectid int 

declare @objectname sysname 

declare @ident int 

set nocount on 

set @objectid=object_id(@tablename) 

if @objectid is null -- 判斷物件是否存在 

begin 

print 'the object not exists' 

return 

end 

set @objectname=rtrim(object_name(@objectid)) 

if @objectname is null or charindex(@objectname,@tablename)=0 --此判斷不嚴密 

begin 

print 'object not in current database' 

return 

end 

if objectproperty(@objectid,'istable') < > 1 -- 判斷物件是否是table 

begin 

print 'the object is not table' 

return 

end 

select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80 

if @ident is not null 

print 'set identity_insert '+@tablename+' on' 

declare syscolumns_cursor cursor

for select c.name,c.xtype from syscolumns c where c.id=@objectid order by c.colid 

open syscolumns_cursor 

set @column='' 

set @columndata='' 

fetch next from syscolumns_cursor into @name,@xtype 

while @@fetch_status < >-1 

begin 

if @@fetch_status < >-2 

begin 

if @xtype not in(189,34,35,99,98) --timestamp不需處理,image,text,ntext,sql_variant 暫時不處理 

begin 

set @column=@column+case when len(@column)=0 then'' else ','end+@name 

set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','','

end 

+case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char 

when @xtype in(231,239) then '''n''''''+'+@name+'+''''''''' --nvarchar,nchar 

when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime 

when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --**alldatetime 

when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier 

else @name end 

end 

end 

fetch next from syscolumns_cursor into @name,@xtype 

end 

close syscolumns_cursor 

deallocate syscolumns_cursor 

set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename 

print '--'+@sql 

exec(@sql) 

if @ident is not null 

print 'set identity_insert '+@tablename+' off' go

將表中的資料生成INSERT語句

create procedure dbo outputdata tablename varchar 100 表名 asdeclare isidentity int declare columnname varchar 100 列名 declare typename varchar 100 資料型別 ...

基於SQL指令碼將資料庫表及欄位提取為C 中的類

開發時,勉不了需要使用sql直接與資料庫互動,這時對於資料庫中的表名及欄位名會使用的比較多。如果每使用一次都複製一個,實在蛋疼。所以就考慮將其做成const常量。但是資料庫中的表和欄位相當多,一個一個敲,不但累,還有可能敲錯。要保證正確,最好的辦法當然是使用工具或者指令碼。這裡提供一個sql指令碼的...

SQL將A表的現有資料新增到B表

insert into b select from a 1.1將a表中所有資訊插入到b中。a與b表結構相同,且當前資料庫中未建立該表 select into b from a 2.僅複製結構不復制資料 將a表的產品名稱新增到b表中的產品名稱欄位中 update 庫單商品表 set 產品名稱 sele...

C 將Excel資料表匯入SQL資料庫的兩種方法

實現在c 中可高效的將excel資料匯入到sqlserver資料庫中,很多人通過迴圈來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是system.data.sqlclient.sqlbulkcopy 類來實現。using system using system.colle...

C 將Excel資料表匯入SQL資料庫的兩種方法

最近用寫個winform程式想用excel 檔案匯入資料庫中,網上尋求辦法,找到了這個經過嘗試可以使用。方法一 實現在c 中可高效的將excel資料匯入到sqlserver資料庫中,很多人通過迴圈來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是system.data.sq...