当前位置:Gxlcms > mysql > sqlserver将表内容导出insert语句

sqlserver将表内容导出insert语句

时间:2021-07-01 10:21:17 帮助过:67人阅读

GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER OFFGOcreate procedure [dbo].[BicashyOutputData](@tablename varchar(256),@whereStr varchar(256)) AS declare @column varchar(1000) declare @columndata varchar(1000) declare @sql varchar(4000) declar

  1. GO
  2. SET ANSI_NULLS ON
  3. GO
  4. SET QUOTED_IDENTIFIER OFF
  5. GO
  6. create procedure [dbo].[BicashyOutputData](@tablename varchar(256),@whereStr varchar(256))
  7. AS
  8. declare @column varchar(1000)
  9. declare @columndata varchar(1000)
  10. declare @sql varchar(4000)
  11. declare @xtype tinyint
  12. declare @name sysname
  13. declare @objectId int
  14. declare @objectname sysname
  15. declare @ident int
  16. set nocount on
  17. set @objectId=object_id(@tablename)
  18. if @objectId is null -- 判斷對象是否存在
  19. begin
  20. print 'The object not exists'
  21. return
  22. end
  23. set @objectname=rtrim(object_name(@objectId))
  24. if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
  25. begin
  26. print 'object not in current database'
  27. return
  28. end
  29. if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判斷對象是否是table
  30. begin
  31. print 'The object is not table'
  32. return
  33. end
  34. select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80
  35. if @ident is not null
  36. print 'SET IDENTITY_INSERT '+@TableName+' ON'
  37. declare syscolumns_cursor cursor
  38. for select c.name,c.xtype from syscolumns c where c.id=@objectid order by c.colid
  39. open syscolumns_cursor
  40. set @column=''
  41. set @columndata=''
  42. fetch next from syscolumns_cursor into @name,@xtype
  43. while @@fetch_status < >-1
  44. begin
  45. if @@fetch_status < >-2
  46. begin
  47. if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理
  48. begin
  49. set @column=@column+case when len(@column)=0 then'' else ','end+@name
  50. set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','','
  51. end
  52. +case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char
  53. when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar
  54. when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime
  55. when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime
  56. when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier
  57. else @name end
  58. end
  59. end
  60. fetch next from syscolumns_cursor into @name,@xtype
  61. end
  62. close syscolumns_cursor
  63. deallocate syscolumns_cursor
  64. set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','');'' from '+@tablename+' '+@whereStr
  65. print '--'+@sql
  66. exec(@sql)
  67. if @ident is not null
  68. print 'SET IDENTITY_INSERT '+@TableName+' OFF'

用法:

exec BicashyOutputData
'表名', -- varchar(256)
'where语句' -- varchar(256)

如查询条件中含有字符串,需要在字符串前后加 “”

例子:

exec BicashyOutputData
'表名', -- varchar(256)
'where 字段名 in ("阿百川","大","地方") and COST is not null' -- varchar(256)

人气教程排行