让我首先说:“我确定有一种更简单的方法可以执行此操作,但我找不到它...”
我试图基于记录中的4个独立值构造一个跟踪号,以便我可以串联变量并将该串联字符串插入另一个表中。
DECLARE @fy char = '';
SET @fy = (SELECT proposalCallID,
CASE
WHEN proposalCallID IN (7, 8) THEN '19'
WHEN proposalCallID IN (5, 6) THEN '18'
END
FROM proposalPackage WHERE proposalCallID = 15)
我收到一个错误“当EXISTS未引入子查询时,只能在选择列表中指定一个表达式。”
跟踪号由4个部分组成,因此我需要对其中的4个查询进行串联以组成完整的跟踪号。
感谢您的帮助。
答案 0 :(得分:2)
您要在查询中选择2列(即多个值),但尝试将它们推入单个值变量中。
您的查询选择proposalCallID
本身,然后选择CASE语句生成的另一列。因此,结果集将包括两列。 SQL Server不能在一个变量中存储两列。这就是导致您出错的原因。
尝试以下方法:
DECLARE @fy VARCHAR(10) = '';
SELECT @fy = CASE
WHEN proposalCallID IN (7, 8) THEN '19'
WHEN proposalCallID IN (5, 6) THEN '18'
ELSE ''
END
FROM proposalPackage
WHERE proposalCallID = 15;
答案 1 :(得分:2)
这是您要做什么吗?
DECLARE @fy char(2) = '';
SELECT @fy = (CASE WHEN proposalCallID IN (7, 8) THEN '19'
WHEN proposalCallID IN (5, 6) THEN '18'
END)
FROM proposalPackage
WHERE proposalCallID = 15;
请注意@fy
的长度规范,因此该值合适。 始终在SQL Server中将长度指定与字符类型一起使用。
根据逻辑,您可以完全省去设置值。 CASE
表达式返回的值为NULL
,因此:
DECLARE @fy char(2);
效果完全一样。
答案 2 :(得分:0)
如果我理解正确,您对一个字符串的四个部分中的每个部分都有一个查询吗?
SET @fy = (query1) + (query2) + (query3) + (query 4)