Sql server 如何组合填充两个独立变量的两个大小写表达式?
我有一个存储过程,它接受用户输入,然后返回两个值。目前,我有两个Sql server 如何组合填充两个独立变量的两个大小写表达式?,sql-server,tsql,variables,case-when,Sql Server,Tsql,Variables,Case When,我有一个存储过程,它接受用户输入,然后返回两个值。目前,我有两个case when表达式可以为我完成这项工作,但我正在尝试找出是否可以将这两个表达式组合起来,生成更简单、更整洁的代码 下面是我当前的案例 DECLARE @SpecialsVariable varchar(max) DECLARE @SpecialName varchar(64) SET @SpecialsVariable = CASE @Special WHEN 'Pet
case when
表达式可以为我完成这项工作,但我正在尝试找出是否可以将这两个表达式组合起来,生成更简单、更整洁的代码
下面是我当前的案例
DECLARE @SpecialsVariable varchar(max)
DECLARE @SpecialName varchar(64)
SET @SpecialsVariable = CASE @Special
WHEN 'Petr_analysis' THEN 'RAW_ColloTel,RAW_DetroCol'
WHEN 'AFT_analysis' THEN 'RAW_Defo,RAW_Defr,RAW_Floo,RAW_Flor'
WHEN 'Fisch_analysis' THEN 'RAW_COke,RAW_Gas,RAW_H2O,RAW_Tar'
END
SET @SpecialName = CASE @Special
WHEN 'Petr_analysis' THEN 'Petrography'
WHEN 'AFT_analysis' THEN 'Ash Fusion Temperature'
WHEN 'Fisch_analysis' THEN 'Fischer-Tropsch'
END
我尝试了下面的代码,但在两个集合变量之间的逗号方面出现了一个错误
DECLARE @Special varchar(64) = 'Petr_analysis'
DECLARE @SpecialsVariable varchar(max)
DECLARE @SpecialName varchar(64)
set @SpecialName, @SpecialsVariable = case @Special
when 'Petr_analysis' then 'Petrography', 'RAW_ColloTel,RAW_DetroCol'
when 'AFT_analysis' then 'Ash Fusion Temperature', 'RAW_Defo,RAW_Defr,RAW_Floo,RAW_Flor'
when 'Fisch_analysis' then 'Fischer-Tropsch', 'RAW_COke,RAW_Gas,RAW_H2O,RAW_Tar'
end
提前谢谢你不,不行。
case
表达式只能为每个条件返回标量值
但是,您可以使用表并使用select语句填充变量:
CREATE TABLE SpecialMapping -- Find a better name for this, please
(
Special varchar(64),
Name varchar(64),
Variable varchar(max) -- Do you really need max here?
)
INSERT INTO SpecialMapping (Sepcial, Name, Variable) VALUES
('Petr_analysis', 'Petrography', 'RAW_ColloTel,RAW_DetroCol'),
('AFT_analysis', 'Ash Fusion Temperature', 'RAW_Defo,RAW_Defr,RAW_Floo,RAW_Flor'),
('Fisch_analysis', 'Fischer-Tropsch', 'RAW_COke,RAW_Gas,RAW_H2O,RAW_Tar');
在存储过程中:
SELECT @SpecialName = Name
, @SpecialsVariable = Variable
FROM SpecialMapping
WHERE WHERE Special = @Special;
我不相信你能那样把它们结合起来
我认为你的选择是正确的
- 独立设置变量,就像第一个块一样
- 嵌套的if语句
- 创建一个引用表
嵌套if的示例
IF @Special = 'Petr_analysis'
BEGIN
(set your variables)
END
ELSE IF @Special = 'AFT_analysis'
BEGIN
...
带有三列的参考表示例,例如Special、SpecialVariable、SpecialName
SELECT @SpecialVariable = yt.SpecialVariable,
@SpecialName = yt.SpecialName
FROM yourtable yt
WHERE yt.Special = @Special
如果这是一种一次性需求,另一种选择可能是使用表值构造函数:
e、 g:
有关表值构造函数的信息:
当前使用的是varchar(max),因为我还没有确定最佳长度大小。对于这个问题,我缩短了一些@SpecialsVariable values.BTW,您真的不应该在SQL中使用分隔字符串。()
DECLARE @SpecialsVariable varchar(max)
DECLARE @SpecialName varchar(64)
DECLARE @Special varchar(30) = 'Petr_analysis'
select @SpecialsVariable = tab.Variable, @SpecialName = tab.Name from
(VALUES
('Petr_analysis', 'RAW_ColloTel,RAW_DetroCol', 'Petrography'),
('AFT_analysis', 'RAW_Defo,RAW_Defr,RAW_Floo,RAW_Flor', 'Ash Fusion Temperature'),
('Fisch_analysis', 'RAW_COke,RAW_Gas,RAW_H2O,RAW_Tar', 'Fischer-Tropsch')
) tab (Special, Variable, Name)
where tab.Special = @Special