zoukankan      html  css  js  c++  java
  • 自动生成INSERT语句的SQL存储过程

    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 test
    

    把得到的insert语句Copy后放置在如下位置执行: 

    set Identity_Insert text on
    
    //insert 语句
    
    set Identity_Insert test off
    

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

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

      



    签名:删除冗余的代码最开心,找不到删除的代码最痛苦!
  • 相关阅读:
    048——VUE中使用animate.css动画库控制vue.js过渡效果
    047——VUE中css过渡动作实例
    046——VUE中组件之使用动态组件灵活设置页面布局
    045——VUE中组件之父组件使用scope定义子组件模板结构
    004PHP文件处理——目录操作:glob rewinddir opendir readdir
    003PHP文件处理——目录操作:rename scandir
    044——VUE中组件之使用内容分发slot构建bootstrap面板panel
    Linux输出信息并将信息记录到文件(tee命令)
    linux下使用SVN上传项目
    linux下将文件上传到svn服务器
  • 原文地址:https://www.cnblogs.com/season2009/p/2517536.html
Copyright © 2011-2022 走看看