【发布时间】:2014-08-18 07:48:26
【问题描述】:
我的存储过程:
CREATE PROCEDURE TEST_TEMPLATE
@TEMPLATE_TYPE INT=NULL
AS
BEGIN
SELECT
TEMPLATE_ID,
TEMPLATE_NAME
FROM
BDC_TEMPLATES
WHERE
TEMPLATE_CAN_BE_APPLIED_TO IN (
CASE
WHEN @TEMPLATE_TYPE=0 OR @TEMPLATE_TYPE=1 THEN @TEMPLATE_TYPE -- 0:EMAIL & LETTER , 1: EMAIL
WHEN @TEMPLATE_TYPE=2 THEN (SELECT DATA FROM UDF_DP_SPLIT_STRING('0,2', ',')) -- 2: LETTER
ELSE TEMPLATE_CAN_BE_APPLIED_TO
END)
END
以上存储过程返回如下错误:
消息 512,级别 16,状态 1,过程 TEST_TEMPLATE,第 6 行
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
当使用以下输入执行时:
exec TEST_TEMPLATE 2
我在WHERE 条件中使用IN 子句,因为当@Template_Type 为“2”时,Template_can_be_applied_to column 可以是值0 和2 中的任何一个。
【问题讨论】:
-
SELECT DATA FROM UDF_DP_SPLIT_STRING('0,2', ','),此选择语句返回 > 1 条记录,您可能需要将其与 key 连接以确保仅选择并输出 1 条记录它
-
我期望从那里获得多个记录,这就是为什么我在 where 条件中有 'In' 子句。
标签: sql sql-server subquery