sqlserver 表中记录生成insert,可以加条件,可以生成建表语句
sqlserver 表中记录生成insert,可以加条件,可以生成建表语句
create PROCEDURE [sp_getinsert] ( @tablename VARCHAR(256) , --如果非默认架构,可以加上架构名 例如:schema1.tablename @where VARCHAR(1000) = '', @create BIT =0 ) AS BEGIN SET NOCOUNT ON; IF @create=1 EXEC sp_gettext @name=@tablename,@identity=1,@index=2; DECLARE @sqlstr VARCHAR(max)= ''; DECLARE @sqlstr1 VARCHAR(max); DECLARE @sqlstr2 VARCHAR(max) , @HasIdentity BIT; SET @HasIdentity = OBJECTPROPERTY(OBJECT_ID(@tablename), 'TableHasIdentity'); IF ( @HasIdentity = 1 ) SET @sqlstr = @sqlstr + ' select ''SET IDENTITY_INSERT ' + @tablename + ' ON'' UNION ALL ' + CHAR(10); SELECT @sqlstr = @sqlstr + 'select ''insert ' + @tablename; SELECT @sqlstr1 = ''; SELECT @sqlstr2 = ' ('; SELECT @sqlstr1 = ' values ( ''+'; SELECT @sqlstr1 = @sqlstr1 + col + '+'',''+', @sqlstr2 = @sqlstr2 + QUOTENAME(name) + ',' FROM ( SELECT CASE -- when a.xtype =173 then 'case when '+QUOTENAME(a.name)+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+QUOTENAME(a.name) +')'+' end' WHEN a.xtype = 127 THEN 'case when ' + QUOTENAME(a.name)+(CASE WHEN collation ='Chinese_PRC_CI_AS' THEN '' ELSE ' collate '+collation COLLATE DATABASE_DEFAULT end) + ' is null then ''NULL'' else ' + 'convert(varchar(20),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 104 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(1),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 175 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + '''''''''+' + 'replace(' + QUOTENAME(a.name) + ','''''''','''''''''''')' + '+''''''''' + ' end' WHEN a.xtype = 61 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + '''''''''+' + 'convert(varchar(23),' + QUOTENAME(a.name) + ',121)' + '+''''''''' + ' end' WHEN a.xtype = 106 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(' + CONVERT(VARCHAR(4), a.xprec + 2) + '),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 62 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(23),' + QUOTENAME(a.name) + ',2)' + ' end' WHEN a.xtype = 56 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(11),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 60 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(22),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 239 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + '''''''''+' + 'replace(' + QUOTENAME(a.name) + ','''''''','''''''''''')' + '+''''''''' + ' end' WHEN a.xtype = 108 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(' + CONVERT(VARCHAR(4), a.xprec + 2) + '),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 231 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + '''''''''+' + 'replace(' + QUOTENAME(a.name) + ','''''''','''''''''''')' + '+''''''''' + ' end' WHEN a.xtype = 59 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(23),' + QUOTENAME(a.name) + ',2)' + ' end' WHEN a.xtype = 58 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + '''''''''+' + 'convert(varchar(23),' + QUOTENAME(a.name) + ',121)' + '+''''''''' + ' end' WHEN a.xtype = 52 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(12),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 122 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(22),' + QUOTENAME(a.name) + ')' + ' end' WHEN a.xtype = 48 THEN 'case when ' + QUOTENAME(a.name) + ' is null then ''NULL'' else ' + 'convert(varchar(6),' + QUOTENAME(a.name) + ')' + ' end' -- when a.xtype =165 then 'case when '+QUOTENAME(a.name)+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+QUOTENAME(a.name) +')'+' end' WHEN a.xtype = 167 THEN 'case when ' + QUOTENAME(a.name)+(CASE WHEN collation ='Chinese_PRC_CI_AS' THEN '' ELSE ' collate '+collation COLLATE DATABASE_DEFAULT end) + ' is null then ''NULL'' else ' + '''''''''+' + 'replace(' + QUOTENAME(a.name)+(CASE WHEN collation ='Chinese_PRC_CI_AS' THEN '' ELSE ' collate '+collation COLLATE DATABASE_DEFAULT end) + ','''''''','''''''''''')' + '+''''''''' + ' end' ELSE '''NULL''' END AS col, a.colid, a.name FROM syscolumns a WHERE a.id = OBJECT_ID(@tablename) AND a.xtype <> 189 AND a.xtype <> 34 AND a.xtype <> 35 AND a.xtype <> 36 ) t ORDER BY colid; SELECT @sqlstr = @sqlstr + LEFT(@sqlstr2, LEN(@sqlstr2) - 1) + ') ' + LEFT(@sqlstr1, LEN(@sqlstr1) - 3) + ')'' from ' + @tablename + ( CASE WHEN @where IS NOT NULL AND LEN(@where) > 0 THEN ' where ' + @where ELSE '' END ); IF ( @HasIdentity = 1 ) SET @sqlstr = @sqlstr + ' UNION ALL select ''SET IDENTITY_INSERT ' + @tablename + ' OFF'' ' + CHAR(10); PRINT @sqlstr; EXEC( @sqlstr); SET NOCOUNT OFF; END;
调用示例:
exec [sp_getinsert] @tablename='tablename',@where='id>5 ',@create=0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!