【发布时间】:2013-12-06 21:16:42
【问题描述】:
SELECT
PDADate, T.Merchandizer_ID, T.Merchandizer, Merchandizer_LoginName,
STORE_ID, STORE_CODE, STORE_NAME,
ACCOUNT_ID, ACCOUNT_NAME, Account_Store_Format_Id, Account_Store_Format,
StoreType_Id, StoreType, T.Listid, T.Listname,
T.TimeIn, T.TimeOut, T.PlannedDate, T.Reason, TaskCode, TotalTime
FROM
[dbo].Report_RD_Coverage T
INNER JOIN
#TempLocationH TL ON TL.LocationId=T.Location_Id
WHERE
CONVERT(Date, PDADate) Between (@Start_Date) AND Isnull(@End_Date, @CurrentDate)
AND T.Account_Id IN
(SELECT
CASE WHEN @Account_Id IS NULL THEN T.Account_Id
ELSE (SELECT * FROM UDF_SplitString(@Account_Id,','))
END
)
AND T.StoreType_Id IN
(SELECT
CASE WHEN @StoreType_Id IS NULL THEN T.StoreType_Id
ELSE (SELECT * FROM UDF_SplitString(@StoreType_Id,','))
END
)
AND T.Store_Id IN
(SELECT
CASE WHEN @Store_Id IS NULL THEN T.Store_Id
ELSE (SELECT * FROM UDF_SplitString(@Store_Id,','))
END
)
如果@Account_Id、@StoreType_Id 和@Store_Id 为空,则应选择所有ACCOUNT_ID、STORETYPE_ID 和STORE_ID,否则应根据参数值进行过滤。
UDF_SplitString是分割逗号分隔字符串的函数,它的返回值是一个像这样的表格:
- 1
- 2
- 3
我收到此错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
【问题讨论】:
-
这就是它所说的意思。 IN 语句显然返回不止一行。我会检查每个 IN 语句并验证它返回的行不超过 1 行。
-
我猜这个人正在这样做:
SELECT * FROM UDF_SplitString(@Account_Id,',')) END。指定 UDF_SplitString 函数中返回内容的列名。 -
UDF_SplitString 是逗号分隔符的功能,它正在返回 table 中的值。喜欢
-
嗨,伙计,我得到了答案..
标签: sql-server-2008 runtime-error case where-in