将一个表中的数据生成SQL插入语句,方便系统快速初始化,在数据库中执行创建以下过程就可以了。

if    exists (select * from sysobjects where id=object_id('GenerateData') and  OBJECTPROPERTY(id, 'IsProcedure') =1 )
Drop Procedure GenerateData
go
CREATE PROCEDURE GenerateData
@tablename sysname
AS
begin
declare @column varchar(2000)
declare @columndata varchar(2000)
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' 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 into '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename print '--'+@sql
exec(@sql) if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' OFF'
end
GO

实例,要将表t_sys_menu中的生成插入语句,就如下执行操作即可:

exec GenerateData 't_sys_menu'

最新文章

  1. 【BZOJ-2055】80人环游世界 上下界费用流 (无源无汇最小费用最大流)
  2. JAVA中this用法小结
  3. ACM之Java速成(3)
  4. 看我是一只IT小小鸟有感
  5. 日志工具logback的简介与配置
  6. C# 添加,修改,删除文件夹/文件集合
  7. 转: js中的getYear()函数的问题(推荐用 getFullYear())
  8. Eclipse插件的各种安装方法
  9. Eclipse中代码字体背景变红/变黄/变绿
  10. CSS追加笔记
  11. 联想笔记本Y7000P安装nvidia,cuda,tensorflow,pytorch
  12. MT【66]寻找对称中心
  13. php和mysql学习问题笔记
  14. Windows操作系统下SVN无法上传*.o文件
  15. [转载]用NodeJS打造你的静态文件服务器
  16. 2017-2018-1 JaWorld 团队作业--冲刺7
  17. 面试题12:打印1到最大的n位数(大数问题)
  18. JSP页面的生命周期
  19. Python之函数装饰器
  20. iis不能访问html

热门文章

  1. Centos7设置IP为固定值
  2. seajs和requirejs
  3. 根据字体计算CGRect
  4. LNMP平台搭建---PHP安装篇
  5. $().click(function(){}) 不管用 live()替代品 append之后
  6. Power BI for Office 365(七) Power BI站点
  7. 最大公约数和最小公倍数--java实现
  8. [笔记]HTML
  9. &lt;更新日期03-31-2016&gt; 复利计算5.0 &lt;已改进&gt;
  10. JAVA Day8