sql-server - 循环遍历表名列表并执行语句
问题描述
我正在尝试获取满足某些约束的数据库中表的名称列表。
有了这个名称列表,我想将数据复制到另一个数据库的表中。
我认为我下面的循环将除一件事之外起作用。我不确定如何设置变量@tblName?
例如说下面是表名列表
1. tblA
2. tblB
3. tblZ
在我的第一个循环中,我只想将@tblName 设置为 tblA。
我的代码
declare @numTbls int
declare @count int = 1
declare @tblName nvarchar(100)
set @numTbls = (select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE' and TABLE_NAME like '%somePattern%')
while @count <= @numTbls
begin
set @tblName = (select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE' and TABLE_NAME like '%somePattern%')
exec ('insert into DATABASE_B.dbo.' + @tblName + ' select * from DATABASE_A.dbo.' + @tblName)
set @count = @count + 1
end
解决方案
您实际上并不需要循环来执行此操作
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = ISNULL(@SQL, '')
+ 'INSERT INTO DATABASE_B.dbo.' + QUOTENAME(TABLE_NAME)
+ ' SELECT * FROM DATABASE_A.dbo.' + QUOTENAME(TABLE_NAME) + ';' + char(13)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME like '%somePattern%'
PRINT @SQL
EXEC sp_executesql @SQL
注意:这是假设两个数据库中表的架构相同且列序列相同
推荐阅读
- xamarin.android - chromecustomtab xamarin android MainActivity 泄露了原来绑定在这里的ServiceConnection CustomTabsServiceConnectionImpl@43a61ad
- appium - 无法从 cmd 启动 Appium
- python - 比较两个不匹配的列表并识别具有最大匹配元素的行
- r - 如何找出为什么 svm 将特定观察视为支持向量?
- tensorflow - 多输入深度学习模型中两个输入的平均值
- javascript - 无法使用 React 将数据发布到 Express
- cmake - 如何调试 CMake 自定义命令依赖项的问题
- c# - 获取解决方案中使用的所有 NuGet 包的列表
- php - 使用标头重定向,但 http 代码始终为 200
- scheme - minikanren中的特征结构统一