【发布时间】:2011-07-05 14:31:07
【问题描述】:
SQL Server 2005。
我有一个存储过程,它接受一些参数,这些参数实际上可能有也可能没有传递给它们的数据。因此,它们可能以空字符串的形式出现,也可能带有数据。
数据将是一个分隔的 ID 列表...制造商 ID、目录 ID 等。proc 搜索记录,如果这些参数中的任何一个有数据,则在 where 子句中使用它。
仅供参考:Split 是一个拆分字符串(接受分隔符)并返回表格的函数。
WHERE
...
AND m.Mfg_ID in (CASE WHEN @manufacturerIds <> '' THEN (SELECT * FROM Split(@manufacturerIds, '|')) ELSE (select m.Mfg_Id) END)
我收到以下错误: “子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。”
我不明白的是,如果我删除 CASE 语句,那么我就只有这个......
WHERE
...
AND m.Mfg_ID in (SELECT * FROM Split(@manufacturerIds, '|'))
...运行正常;但是,这使我无法传递空字符串。
任何帮助将不胜感激!
【问题讨论】:
标签: sql-server-2005 tsql subquery expression