在长 SQL 脚本中持续切换变量?

persisted switching variables in long SQL script?

我在长 SQL 脚本中使用切换变量,我想在 SSMS 中以半手动方式 运行。我的意思是,select 执行脚本的某些部分并批量执行这些指令。

脚本开头的切换变量如下所示:

--start of script 
DECLARE @CompanySwitch bit
DECLARE @CompanyA bit=0
DECLARE @CompanyB bit=1
Set @CompanySwitch=@CompanyA

然后,很多长查询,bla bla ...

...

偶尔,在脚本的许多行中,切换变量被评估为 select 某些行为:

--middle of script (2000 lines further down)
SELECT CASE @CompanySwitch WHEN @CompanyA THEN 'titi' WHEN @CompanyB THEN 'toto' END AS UsingSwitchingVariables

如果我尝试单独执行 SELECT CASE,在也单独执行切换变量声明后,我会收到错误消息 137:“必须声明标量变量 @CompanySwitch”。

为了让它工作,我需要将切换变量声明代码复制到我要执行的代码批次的开头,并在一个批次中执行(声明和使用):

DECLARE @CompanySwitch bit
DECLARE @CompanyA bit=0
DECLARE @CompanyB bit=1
Set @CompanySwitch=@CompanyA
SELECT CASE @CompanySwitch WHEN @CompanyA THEN 'titi' WHEN @CompanyB THEN 'toto' END AS UsingSwitchingVariables

不太好用!有没有办法创建可以在执行过程中记住的切换变量?

DROP TABLE IF EXISTS switch;

CREATE TABLE switch(
    id integer primary key,
    company varchar(20),
    CHECK(company='CompanyA' OR company='CompanyB'),
    CHECK(id=1)
);
INSERT INTO switch VALUES(1,'CompanyA');

在任何需要开关的地方:

SELECT CASE company 
  WHEN 'CompanyA' THEN 'titi' 
  WHEN 'CompanyB' THEN 'toto' 
 END AS UsingSwitchingVariables
FROM ...
CROSS JOIN switch