成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

SQL Server將數據導出SQL腳本的方法

2010-08-28 10:52:10來源:西部e網作者:

SQL Server里面的生成SQL腳本,只會包含數據庫及表的字段結構,而不會包含表的數據,也就是SQL腳本里面只有Create database,Create table 這樣的語句,沒有insert into。那么我們怎么樣才能導出數據呢?

SQL Server并不包含這個功能,只能靠第三方的代碼了。

用這個存儲過程可以實現:

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,175then '''''''''+'+@name+'+''''''''' --varchar,char 
when @xtype in(231,239then '''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 你的表名
然后將運行后的結果存成.sql,加上用SQL Server生成的數據庫腳本就可以了。

缺點和問題:

得到導出數據的語句,但image,text,ntext,sql_variant 列不出現在語句,以后改進。

關鍵詞:SQLServer

贊助商鏈接:

主站蜘蛛池模板: 德阳市| 塔城市| 肇源县| 深圳市| 同仁县| 徐汇区| 文昌市| 乳源| 昔阳县| 桃园市| 科尔| 措勤县| 雅安市| 高邮市| 淄博市| 玉树县| 石台县| 临沂市| 汾西县| 揭东县| 商都县| 金平| 唐山市| 南平市| 兖州市| 中江县| 四会市| 紫金县| 浠水县| 涡阳县| 东阿县| 高阳县| 广灵县| 福建省| 青河县| 封开县| 凤翔县| 蛟河市| 沙坪坝区| 全椒县| 临湘市|