自动生成INSERT语句的SQL存储过程

本文介绍了一个SQL存储过程,用于自动生成针对特定表的INSERT语句。此过程考虑了不同数据类型的处理,并展示了如何使用它来简化大量数据的插入操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create 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 
 
      PRINT @sql 
 
      EXEC (@sql) 
  END

--执行存储过程--

exec spGenInsertSQL  表名

有时生成SQL语句很长,采用文本方式显示时无法显示全部,通过如下方式调整:

在 SQL Server 查询窗口中单击右键-〉“查询选项”-〉“查询选项”对话框中的“结果”下,单击“文本”-〉更改"每列中显示的最大数"

出处:

http://www.cnblogs.com/season2009/archive/2012/05/25/2517536.html

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值