sql2000 如何把现有数据 转化为Insert into SQL

引用:

drop proc proc_insert
go
CREATE proc proc_insert (@tablename varchar(256))

as

begin

       set nocount on

       declare @sqlstr varchar(4000)

       declare @sqlstr1 varchar(4000)

       declare @sqlstr2 varchar(4000)

       select @sqlstr='select ''insert '+@tablename

       select @sqlstr1=''

       select @sqlstr2=' ('

       select @sqlstr1= ' values ( ''+'

       select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case

--     when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

       when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end'

       when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

       when a.xtype =61  then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

       when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

       when a.xtype =62  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

       when a.xtype =56  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end'

       when a.xtype =60  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'

       when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

       when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

       when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

       when a.xtype =59  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

       when a.xtype =58  then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

       when a.xtype =52  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end'

       when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'

       when a.xtype =48  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end'

--     when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

       when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' 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

--  print @sqlstr

       exec( @sqlstr)

       set nocount off

end

GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个SQL Server中通用的将查询结果转换为INSERT INTO语句的存储过程: ``` CREATE PROCEDURE dbo.GenerateInsertStatements @table_name nvarchar(128), @where_clause nvarchar(max) = '', @include_column_headers bit = 1 AS BEGIN SET NOCOUNT ON; DECLARE @column_list nvarchar(max); DECLARE @select_list nvarchar(max); DECLARE @insert_list nvarchar(max); DECLARE @sql nvarchar(max); -- Get column list SELECT @column_list = COALESCE(@column_list + ',', '') + QUOTENAME(name) FROM sys.columns WHERE object_id = OBJECT_ID(@table_name); -- Build SELECT statement SET @select_list = 'SELECT ' + @column_list + ' FROM ' + @table_name; IF @where_clause <> '' SET @select_list = @select_list + ' WHERE ' + @where_clause; -- Build INSERT INTO statement SET @insert_list = 'INSERT INTO ' + @table_name + '(' + @column_list + ') VALUES '; SET @insert_list = @insert_list + '(' + STUFF((SELECT ', ' + QUOTENAME(name) FROM sys.columns WHERE object_id = OBJECT_ID(@table_name) FOR XML PATH('')), 1, 2, '') + ')'; -- Build final SQL statement SET @sql = ''; IF @include_column_headers = 1 SET @sql = @sql + 'PRINT ''' + @insert_list + ''''; SET @sql = @sql + 'SELECT ' + STUFF((SELECT ', ' + 'CAST(' + QUOTENAME(name) + ' AS NVARCHAR(MAX))' FROM sys.columns WHERE object_id = OBJECT_ID(@table_name) FOR XML PATH('')), 1, 2, '') + ' FROM (' + @select_list + ') AS tbl'; -- Execute final SQL statement EXEC sp_executesql @sql; END; ``` 使用方法: 1. 执行以下语句创建存储过程: ``` EXEC dbo.sp_executesql N' CREATE PROCEDURE dbo.GenerateInsertStatements @table_name nvarchar(128), @where_clause nvarchar(max) = '', @include_column_headers bit = 1 AS BEGIN SET NOCOUNT ON; DECLARE @column_list nvarchar(max); DECLARE @select_list nvarchar(max); DECLARE @insert_list nvarchar(max); DECLARE @sql nvarchar(max); -- Get column list SELECT @column_list = COALESCE(@column_list + '', '') + QUOTENAME(name) FROM sys.columns WHERE object_id = OBJECT_ID(@table_name); -- Build SELECT statement SET @select_list = ''SELECT '' + @column_list + '' FROM '' + @table_name; IF @where_clause <> '''' SET @select_list = @select_list + '' WHERE '' + @where_clause; -- Build INSERT INTO statement SET @insert_list = ''INSERT INTO '' + @table_name + ''('' + @column_list + '') VALUES ''; SET @insert_list = @insert_list + ''('' + STUFF((SELECT '', '' + QUOTENAME(name) FROM sys.columns WHERE object_id = OBJECT_ID(@table_name) FOR XML PATH('''')), 1, 2, '''') + '')''; -- Build final SQL statement SET @sql = ''''; IF @include_column_headers = 1 SET @sql = @sql + ''PRINT '''''' + @insert_list + ''''''''; SET @sql = @sql + ''SELECT '' + STUFF((SELECT '', '' + ''CAST('' + QUOTENAME(name) + '' AS NVARCHAR(MAX))'' FROM sys.columns WHERE object_id = OBJECT_ID(@table_name) FOR XML PATH('''')), 1, 2, '''') + '' FROM ('' + @select_list + '') AS tbl''; -- Execute final SQL statement EXEC sp_executesql @sql; END; ' ``` 2. 然后,使用以下语法调用存储过程: ``` EXEC dbo.GenerateInsertStatements 'table_name', 'where_clause', include_column_headers ``` 其中,'table_name'是要生成INSERT INTO语句的表名,'where_clause'是可选的WHERE子句,'include_column_headers'是一个布尔值,指定是否在结果中包括列标题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值