自动生成insert数据的SQL脚本

日期: 2008-07-22 作者:OK_008 来源:TechTarget中国 英文

  判断当表存在标识列的时候就要允许将显式值插入表的标识列中,设置:


      Set Identity_insert TableName Off


  判断数据类型:


      如,varchar,char,datetime,nvarchar,nchar,uniqueidentifier时候,在insert字段中就要增加双引号,否则就不加。


   





 Use Test 
  Go 
  Declare 
  @Table1 nvarchar(128), 
  @Table2 nvarchar(128), 
  @Sql1 nvarchar(4000), 
  @Sql2 nvarchar(4000), 
  @SqlIdentityinsert nvarchar(512) 
  Set @Table1=’DutyHistory’ –源表 
  Set @Table2=’Duty’ –目标表 
  IF Object_id(@Table1,’U’) Is Null 
  Return 
  If Isnull(@Table2,’’)=’’ 
  Set @Table2=@Table1 
  Set @SqlIdentityinsert=’’ 
  If exists(select 1 From sys.columns where Object_id=Object_id(@Table1,’U’)) 
  Set @SqlIdentityinsert=’select ’’Set Identity_insert ’+@Table2+’ On ’’’ 
  select 
  @Sql1=Isnull(@Sql1+’,’,’ insert Into ’+@Table2+’ (’)+Quotename(name), 
  @Sql2=Isnull(@Sql2+’+’’,’’+’,’select @Sql1+’’ select ’’’)+’+Case When ’+Quotename(name)+’ Is null Then ’’null’’ Else ’+ 
  Case When user_type_id In(175,61,239,231,58,98,36,167,241) Then ’’’’’’’’’+Rtrim(’+Quotename(name)+’)+’’’’’’’’’ Else ’Rtrim(’+Quotename(name)+’)’ End +’ End’ 
  From sys.columns 
  where Object_id=Object_id(@Table1,’U’) 
  Set @Sql1=@Sql1+’)’ 
  Set @Sql2= ’select Convert(nvarchar(max),’’If Object_id(’’’’’+@Table2+’’’’’,’’’’U’’’’) Is Null Return;’’) As Sqlinsert union All ’+ 
  @SqlIdentityinsert+’ union All ’+ 
  @Sql2+’ From ’+Quotename(@Table1)+Case @SqlIdentityinsert When ’’ Then ’’ Else ’ union All ’ End+ 
  Replace(@SqlIdentityinsert,’ On ’,’ Off’) 
  &#101xec sp_&#101xecutesql @Sql2,N’@Sql1 nvarchar(4000)’,@Sql1 
  Result: 
  Sqlinsert 
  ——————————————————— 
  If Object_id(’Duty’,’U’) Is Null Return; 
  Set Identity_insert Duty On 
  insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) select 1,’Robert’,’01 1 2008 12:00AM’,3.4 
  insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) select 2,’Robert’,’01 2 2008 12:00AM’,3.4 
  insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) select 3,’Robert’,’01 3 2008 12:00AM’,3.4 
  … … 
  insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) select 58,’Robert’,’02 27 2008 12:00AM’,4.5 
  insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) select 59,’Robert’,’02 28 2008 12:00AM’,4.5 
  insert Into Duty ([id],[Name],[WorkDate],[WorkHours]) select 60,’Robert’,’02 29 2008 12:00AM’,4.5 
  Set Identity_insert Duty Off 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

OK_008
OK_008

相关推荐