sql - while 循环中的 SELECT 语句不起作用
问题描述
我创建了以下运行良好的 Select 语句:
SELECT @Block = [Blok], @Year = [Aar]
FROM [PT99991_Result].[dbo].[Testheader]
WHERE N = @TestHeaderID
问题是该Select
语句用于While
循环中,其中数据库可以在循环期间更改为另一个。我试图将语句修改为以下内容,但它不起作用。我也尝试过使用EXEC
which 来解决我的问题,但后来我遇到了局部变量的问题,@Block
而@Year
不是。
SET @DataBase = 'PT99991_RESULT' --This is only for test!
SELECT @Block = [Blok], @Year = [Aar]
FROM '[' + @DataBase + '].[dbo].[Testheader]'
WHERE N = @TestHeaderID
我不确定我做错了什么?
解决方案
而不是while循环,您可以使用未记录的存储过程:ms_foreachdb并针对数据库执行,最后为特定数据库应用过滤器。
警告:不要在生产代码中使用它,因为它使用未记录的存储过程。
CREATE TABLE #test(dbname sysname, blok int, aar int)
DECLARE @db_list NVARCHAR(max) = 'DB1,DB2'
EXECUTE master.sys.sp_MSforeachdb 'USE [?]; declare @blok int, @aar int; INSERT INTO #test SELECT db_name(), blok, aar from [dbo].[Testheader] WHERE N = TestHeaderId;'
SELECT * FROM #test where dbname in
(
SELECT value FROM string_split(@db_list,',')
)
推荐阅读
- python - 如何识别和标记列/数组中每第 n 个元素的序列中的异常或每五组中的“奇数”
- php - 如何在 WordPress PHP Twilio 中使用彩信回复入站短信
- javascript - recatjs 中的 from 验证不会发生?
- java - 为什么参数中的列表不能向上转换?
- php - 是否可以在 IIS 6.0 上使用 php 7?
- google-cloud-platform - 用于识别哪些所有源(gcp 存储桶等)正在输入 pub/sub 主题的命令
- mysql - 如何不间断复制mysql服务器
- swiftui - SwiftUI - 在没有嵌套的情况下导航回家?
- javascript - 当应用程序在后台运行时,css 动画会在 webview 中自动暂停吗?
- php - 我正在制作一个将数据提交到文本文件的表单,我如何让它进入某个目录?(这是我的第一次)