將表資料生成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)+''''''''' --smalldatetime
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
exec UspOutputData 你的表名
工具介紹:
1 InstallShield自帶一個把SQL資料庫的結構和資料匯出為指令碼的功能,很好用,如果剛好要做打包,建議用這個,因為安裝檔案比較大,如果不是做打包不建議用。
2 SqlInsert是一個專門匯出資料為指令碼的小工具,速度沒IS的快,但是一樣好用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-557475/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 資料庫分庫,原來 SQL 和儲存過程寫的報表咋辦?資料庫SQL儲存過程
- oracle使用儲存過程將表資料以excel格式匯出Oracle儲存過程Excel
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- SQL SERVER儲存過程AS和GO的含義SQLServer儲存過程Go
- 資料庫儲存過程資料庫儲存過程
- SQL 分頁儲存過程SQL儲存過程
- mysql中使用儲存過程生成1億條資料MySql儲存過程
- ORACLE PL/SQL 物件、表資料對比功能儲存過程簡單實現OracleSQL物件儲存過程
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- SQL server儲存過程函式SQLServer儲存過程函式
- 基於儲存過程的百萬級測試資料自動生成儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- SQL Server儲存過程的優缺點SQLServer儲存過程
- 使用SQL SERVER儲存過程實現歷史資料遷移SQLServer儲存過程
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 用儲存過程和 JAVA 寫報表資料來源有什麼弊端?儲存過程Java
- 配置SQL Server Service Broker來傳送儲存過程資料(下)SASQLServer儲存過程
- 配置SQL Server Service Broker來傳送儲存過程資料(上)CYSQLServer儲存過程
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- 儲存過程_造使用者資料儲存過程
- 【SQL Server】常見系統儲存過程SQLServer儲存過程
- MySQL儲存過程的建立和使用MySql儲存過程
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- SQL Server 2005的複製儲存過程選項BYSQLServer儲存過程
- MySQL儲存過程裡動態SQL的使用UXMySql儲存過程UX
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- Mysql資料庫建立儲存過程實現往資料表中新增欄位的方法MySql資料庫儲存過程
- oracle的儲存過程Oracle儲存過程
- Mysql使用儲存過程快速新增百萬資料MySql儲存過程
- 關於InnoDB表資料和索引資料的儲存索引
- PL/SQL中動態掉用儲存過程SQL儲存過程