当前位置:Gxlcms > 数据库问题 > SQL Server 动态生成数据库所有表Insert语句

SQL Server 动态生成数据库所有表Insert语句

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

  1. --[OpinionList]
  2. SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] ON
  3. INSERT INTO [master_new].[dbo].[OpinionList](Id,Batch,LinkId,DB_Names,CreateTime)
  4. SELECT * FROM [DBA_DB].[dbo].[OpinionList]
  5. SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] OFF
  6. GO
技术分享

 

二、 脚本解释

(一) 我编写了一个模板,这个模板你只需要设置@fromdb和@todb的名称,这样就会生成从@fromdb导出所有表插入到@todb中的SQL语句,需要注意的是:要选择@fromdb对应的数据库执行模板SQL,不然无法生成需要的表和字段。

技术分享
  1. DECLARE @fromdb VARCHAR(100)
  2. DECLARE @todb VARCHAR(100)
  3. DECLARE @tablename VARCHAR(100)
  4. DECLARE @columnnames NVARCHAR(300)
  5. DECLARE @isidentity NVARCHAR(30)
  6. DECLARE @temsql NVARCHAR(max)
  7. DECLARE @sql NVARCHAR(max)
  8. SET @fromdb = ‘master‘
  9. SET @todb = ‘master_new‘
  10. --游标
  11. DECLARE @itemCur CURSOR
  12. SET @itemCur = CURSOR FOR
  13. SELECT ‘[‘+[name]+‘]‘ from sys.tables WHERE type=‘U‘ order by name
  14. OPEN @itemCur
  15. FETCH NEXT FROM @itemCur INTO @tablename
  16. WHILE @@FETCH_STATUS=0
  17. BEGIN
  18. SET @sql = ‘‘
  19. --获取表字段
  20. SET @temsql = N‘
  21. BEGIN
  22. SET @columnnamesOUT =‘‘‘‘
  23. SELECT @columnnamesOUT = @columnnamesOUT + ‘‘,‘‘ + name
  24. From sys.columns where object_id=OBJECT_ID(‘‘[‘+@fromdb+‘].dbo.‘+@tablename+‘‘‘)
  25. order by column_id
  26. SELECT @columnnamesOUT=substring(@columnnamesOUT,2,len(@columnnamesOUT))
  27. END
  28. EXEC sp_executesql @temsql,N‘@columnnamesOUT NVARCHAR(300) OUTPUT‘,@columnnamesOUT=@columnnames OUTPUT
  29. PRINT (‘--‘+@tablename)
  30. --判断是否有自增字段
  31. SET @temsql = N‘
  32. BEGIN
  33. SET @isidentityOUT =‘‘‘‘
  34. SELECT @isidentityOUT = name
  35. From sys.columns where object_id=OBJECT_ID(‘‘[‘+@fromdb+‘].dbo.‘+@tablename+‘‘‘)
  36. and is_identity = 1
  37. END
  38. EXEC sp_executesql @temsql,N‘@isidentityOUT NVARCHAR(30) OUTPUT‘,@isidentityOUT=@isidentity OUTPUT
  39. --IDENTITY_INSERT ON
  40. IF @isidentity != ‘‘
  41. BEGIN
  42. SET @sql = ‘SET IDENTITY_INSERT [‘+@todb+‘].[dbo].[‘+@tablename+‘] ON
  43. END
  44. --INSERT
  45. SET @sql = @sql+‘INSERT INTO [‘+@todb+‘].[dbo].[‘+@tablename+‘](‘+@columnnames+‘)
  46. SELECT * FROM [‘+@fromdb+‘].[dbo].[‘+@tablename+‘]‘
  47. --IDENTITY_INSERT OFF
  48. IF @isidentity != ‘‘
  49. BEGIN
  50. SET @sql = @sql+‘
  51. SET IDENTITY_INSERT [‘+@todb+‘].[dbo].[‘+@tablename+‘] OFF‘
  52. END
  53. --返回SQL
  54. PRINT(@sql)PRINT(‘GO‘)+CHAR(13)
  55. FETCH NEXT FROM @itemCur INTO @tablename
  56. END
  57. CLOSE @itemCur
  58. DEALLOCATE @itemCur
技术分享

 

(二) 下面就是返回的生成的部分脚本,模板会自动判断表是否存在自增字段,如果存在就会生成对应的IDENTITY_INSERT语句。

技术分享
  1. --spt_values
  2. INSERT INTO [master_new].[dbo].[spt_values](name,number,type,low,high,status)
  3. SELECT * FROM [master].[dbo].[spt_values]
  4. GO
  5. --[OpinionList]
  6. SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] ON
  7. INSERT INTO [master_new].[dbo].[OpinionList](Id,Batch,LinkId,DB_Names,CreateTime)
  8. SELECT * FROM [DBA_DB].[dbo].[OpinionList]
  9. SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] OFF
  10. GO
技术分享

SQL Server 动态生成数据库所有表Insert语句

标签:

人气教程排行