导出 SQL SERVER 表中数据为脚本

时间:2022-05-26 03:01:13

ALTER PROCEDURE [dbo].[Usp_OutputData]
@tablename sysname,
@outputIdentitycolumn int
AS
declare @column varchar(3000)
declare @columndata varchar(8000)
declare @sql varchar(8000)
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'
--添加是否输出自增字段列判断功能(Identitycolumn)
select c.name,c.xtype into #tempallcolums from syscolumns c where c.id=@objectid order by c.colid
--判断自增列并根据@outputIdentitycolumn决定是否排除;1为包含,0为不包含
if @outputIdentitycolumn=0
begin
Select so.name Table_name, --表名字
sc.name Iden_Column_name --自增字段名字
--ident_current(so.name) curr_value --自增字段当前值
--ident_incr(so.name) incr_value, --自增字段增长值
--ident_seed(so.name) seed_value --自增字段种子值
into #tempIDENTITY from sysobjects so
Inner Join syscolumns sc
on so.id = sc.id
and columnproperty(sc.id, sc.name, 'IsIdentity') = 1
Where upper(so.name) = upper(@tablename)

delete from #tempallcolums where name in(select Iden_Column_name from #tempIDENTITY)
drop table #tempIDENTITY
end
--end
declare syscolumns_cursor cursor

for select name,xtype from #tempallcolums

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'
drop table #tempallcolums

使用:
Usp_OutputData 'contact',0

结果:
insert contact(FirstName,LastName,EmailAddress,testdate) values( N'AAAAA' , N'BBBBB' , N'CCCCC' , NULL )
insert contact(FirstName,LastName,EmailAddress,testdate) values( N'xxx' , N'BBBBB' , N'CCaaaa' , NULL )
insert contact(FirstName,LastName,EmailAddress,testdate) values( N'AAAAA' , N'BBBBB' , N'CCCCC' , NULL )
insert contact(FirstName,LastName,EmailAddress,testdate) values( N'AAAAA' , N'cc' , N'CCCCC' , NULL )
insert contact(FirstName,LastName,EmailAddress,testdate) values( N'AAAAAxxx' , N'BBBBB' , N'CCCCC' , NULL )
insert contact(FirstName,LastName,EmailAddress,testdate) values( N'ccccc' , N'BBBBB' , N'CCCCC' , NULL )

导出 SQL SERVER 表中数据为脚本的更多相关文章

  1. 在一个SQL Server表中的多个列找出最大值

    在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...

  2. SQL server 表中如何创建索引?

    SQL server 表中如何创建索引?看个示例,你就会了 use master goif db_id(N'zhangxu')is not nulldrop database zhangxugocre ...

  3. SQL Server:把CSV文件导入到SQL Server表中

    有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Ser ...

  4. 把CSV文件导入到SQL Server表中

    保存数据库数据直接查询select * from tableName 在数据表格的左上角右击——将结果另存为选择路劲保存好的就是.csv格式的数据 有时候我们可能会把CSV中的数据导入到某个数据库的表 ...

  5. 多线程下不反复读取SQL Server 表的数据

    在进行一些如发送短信.邮件的业务时,我们常常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送.发送完毕后再将数据转移到历史表中,这样保证待发送表的数据普通情况下不会太 ...

  6. 多线程下不重复读取SQL Server 表的数据

    在进行一些如发送短信.邮件的业务时,我们经常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送,发送完成后再将数据转移到历史表中,这样保证待发送表的数据一般情况下不会太 ...

  7. SQL Server表的数据量大小查询

    今天想在服务器上还原一个DB,发现磁盘空间不够,查看发现,其中一个DB竟然有56G了.因此想收缩一下这个DB,发现大小没多大变化.然后在网上找了找SQL脚本,看能不能查看下哪个表的数据量那么大. 网上 ...

  8. 为SQL Server表中的列添加/修改/删除注释属性(sp_addextendedproperty、sp_updateextendedproperty、sp_dropextendedproperty)

    本篇基本完全参考:sql--sp_addextendedproperty和sp_updateextendedproperty (Transact-SQL) 三个存储过程用法一样,以sp_addexte ...

  9. sql:表中数据全部删除之后,重新插入时,从1开始增加

    数据库中设置了自增列,有时候需要清楚数据库从新录入数据.最常见的做法就是使用sql语句"delete 表明名"或是直接选中数据,然后删除数据.但是再次插入数据的时候,你就会发现自增 ...

随机推荐

  1. Eclipse IDE for C/C++ Developers安装配置详解

    Eclipse IDE for C/C++ Developers安装配置详解(转) 转自:http://hi.baidu.com/ltb6w/item/986532efd712460f570f1ddc ...

  2. skip-grant-tables:非常有用的mysql启动参数

    skip-grant-tables:非常有用的mysql启动参数   介绍一个非常有用的mysql启动参数—— --skip-grant-tables.顾名思义,就是在启动mysql时不启动grant ...

  3. Asp.net简单三层+Sqllite 增删改查

    新建项目à新建一个空白解决方案 在Model新建一个实体类 using System; using System.Collections.Generic; using System.Linq; usi ...

  4. J - A Bug's Life - poj2492

    这个题目很有意思啊,有一些bug生物(肯定是程序员养的),有人观察他们的生活习惯,观察他们之间是否有同性恋关系,比如ab发生关系,bc发生关系,ab发生关系...产生了同性恋了,你需要判断一下这种关系 ...

  5. 1. MongoDB 安装和启动

    1. MongoDB是一个Document Database.A record in MongoDB is a document,MongoDB documents are similar to JS ...

  6. new 、 delete 、 malloc 、 free 关系

    1.new . delete . malloc . free 关系 delete 会调用对象的析构函数 , 和 new 对应, free 只会释放内存, new 调用构造函数. malloc 与 fr ...

  7. C# int数据类型呵呵

    int16=short; int32=int; int64=long; Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数. Int32 值类型表示值介于 -2,147,4 ...

  8. Open SuSE中自定义的环境变量

    针对与其它发行版本的Linux,网络上给出的添加环境变量的位置都是在/etc/profile文件中添加.在Open SuSE中也有/etc/profile文件,不过从该文件的前几行注释可以看出,官方建 ...

  9. 编辑linux内核与bosybox 时,make menuconfig 出现错误

    *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' req ...

  10. OpenGIS 介绍(转)

    值此FOSS4G大会即将召开之日,最近我会在Blog上依次介绍一些OpenGIS标准.架构及用于实现的软件.一方面给初涉此行的朋友一个快速入门的概览,另一方面也是对我接触OpenGIS近一年来的总结. ...