在长 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
我在长 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