将表中的数据自动生成INSERT语句的存储过程,自己收藏一下

 

代码
set  ANSI_NULLS  ON
set  QUOTED_IDENTIFIER  ON
go


-- 这是一个可以将表中的数据自动生成INSERT语句的存储过程
--
有个BUG,如果是自动增长列,数据也会被插入
--
在查询分析器中执行完成后,可以从执行结果中自制出SQL脚本。

ALTER     proc   [ dbo ] . [ spGenInsertSQL ]  ( @tablename   varchar ( 256 ))
as
begin
declare   @sql   varchar ( 8000 )
declare   @sqlValues   varchar ( 8000 )
set   @sql   = '  ( '
set   @sqlValues   =   ' values ( '' + '
select   @sqlValues   =   @sqlValues   +  cols  +   '  +  '' , ''  +  '  , @sql   =   @sql   +   ' [ '   +  name  +   ' ], '
from
      (
select   case
                
when  xtype  in  ( 48 , 52 , 56 , 59 , 60 , 62 , 104 , 106 , 108 , 122 , 127 )       

                     
then   ' case when  ' +  name  + '  is null then  '' NULL ''  else  '   +   ' cast( ' +  name  +   '  as varchar) ' + '  end '

                
when  xtype  in  ( 58 , 61 )

                     
then   ' case when  ' +  name  + '  is null then  '' NULL ''  else  ' + '''''''''  +  '   +   ' cast( ' +  name  + '  as varchar) ' +   ' + ''''''''' + '  end '

               
when  xtype  in  ( 167 )

                     
then   ' case when  ' +  name  + '  is null then  '' NULL ''  else  ' + '''''''''  +  '   +   ' replace( ' +  name + ' , '''''''' , '''''''''''' ) '   +   ' + ''''''''' + '  end '

                
when  xtype  in  ( 231 )

                     
then   ' case when  ' +  name  + '  is null then  '' NULL ''  else  ' + ''' N ''''''  +  '   +   ' replace( ' +  name + ' , '''''''' , '''''''''''' ) '   +   ' + ''''''''' + '  end '

                
when  xtype  in  ( 175 )

                     
then   ' case when  ' +  name  + '  is null then  '' NULL ''  else  ' + '''''''''  +  '   +   ' cast(replace( ' +  name + ' , '''''''' , '''''''''''' ) as Char( '   +   cast (length  as   varchar +   ' ))+ ''''''''' + '  end '

                
when  xtype  in  ( 239 )

                     
then   ' case when  ' +  name  + '  is null then  '' NULL ''  else  ' + ''' N ''''''  +  '   +   ' cast(replace( ' +  name + ' , '''''''' , '''''''''''' ) as Char( '   +   cast (length  as   varchar +   ' ))+ ''''''''' + '  end '

                
else   ''' NULL '''

              
end   as  Cols,name

         
from  syscolumns 

        
where  id  =   object_id ( @tablename )

      ) T
set   @sql   = ' select  '' INSERT INTO [ ' +   @tablename   +   ' ] '   +   left ( @sql , len ( @sql ) - 1 ) + ' '   +   left ( @sqlValues , len ( @sqlValues ) - 4 +   ' ) ''  from  ' + @tablename + '  where companyid>=458 '
print   @sql
exec  ( @sql )
end


 

 

 

你可能感兴趣的:(insert)