首页 > 解决方案 > 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

甚至有可能做我想做的事吗????

标签: sqlsql-server

解决方案


为此,您需要动态 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;

推荐阅读