【发布时间】:2019-08-25 19:55:39
【问题描述】:
我有一个名为dbo.ItemTagTransactions 的表,如下所示:
PK_ID | ItemTag
1 | Filename.xlsx
2 | ABC7798
3 | {empty string}
4 | Completed
如何根据上表中ItemTag 列中的值构造动态WHERE 子句?此表可能有一条或多条记录。
我将使用的查询如下所示:
SELECT FK_QueueItem_ItemTagTransaction
FROM dbo.ItemTagTransactions
WHERE TagValue = {insert dynamic where clause here}
WHERE 子句中的字段总是引用 TagValue,它可以是 1 或更多。它基于一个由分号分隔的字符串,就像这样。 "文件名.xlsx;ABC7798;;已完成"
想要的结果是这样的:
SELECT FK_QueueItem_ItemTagTransaction
FROM dbo.ItemTagTransactions
WHERE TagValue = 'Filename.xlsx'
OR TagValue = 'ABC7798'
OR TagValue = ''
OR TagValue = 'Completed'
附:我将在存储过程中使用它
【问题讨论】:
-
你在说什么?由于您使用的是存储过程,只需将
@Variable传递给您的 proc 和WHERE TagValue = @Variable -
样本数据最好使用DDL + DML。请edit您的问题包括它,您当前的尝试和您想要的结果。更多详情,read this.
-
好吧,您只需要一个 where 子句,例如
where TagValue in ([split my ; delimited string])。因此,如果您在 SQL 中使用 Google 拆分分隔字符串。 -
表格非常适合与
in子句一起使用。where tagValue in (select Value from SplitStringTable) -
@thecodeexplorer - 你真好 :) 但 MarcinJ 也给出了答案,所以给他吧。
标签: sql sql-server tsql select where