sql - SQL - 从不同的数据库中动态选择信息到变量中
问题描述
我有 3 个数据库,db 1 和 db 2 用于作业,db 3 用于工作流。
db 1 和 2 都有一个直接在 db 3 中创建工作流的过程。
我在 db 3 中有一个触发器,它在创建工作流时激活,因为我需要将更多信息从作业添加到工作流中。
所以我所做的是创建一个变量,我使用来自 db 1 的正常选择(从 db1.dbo.job 选择作业)设置该变量
我想知道是否有办法动态执行 select 语句,例如: if db1 then @db = db1 if db2 then @db = db2
然后在@variable = select job from @db
现在我所拥有的是以下查询,但我很简单地将我的所有逻辑添加到另一个 IF,然后更改选择语句......我不想这样做,因为我将添加更多数据库以与 db3 集成
Declare
@flag int,
@variable varchar(10)
set @flag = 1
if @flag = 1
begin
set @variable = (select job from db1.dbo.job)
end
else if @flag = 2
begin
set @variable = (select job from db2.dbo.job)
end
update db3 set job = @variable
甚至有可能做我想做的事吗????
解决方案
为此,您需要动态 SQL。
笔记:
- 始终用于
QUOTENAME
正确转义名称 - 用于
sp_executesql
一直传递参数中的数据。你也可以使用OUTPUT
参数
Declare
@flag int
set @flag = 1
DECLARE @sql nvarchar(max) = N'
UPDATE db3
SET job = (
SELECT TOP 1 job
FROM ' + QUOTENAME(CASE WHEN @flag = 1 THEN 'db1' ELSE 'db2' END) + '.dbo.job
);
';
EXEC sp_executesql @sql;