让我们说我有一个SQL表,其ID为1
至30
,但我想从sql中排除数字7,10,21。
我如何在不编写类似代码的情况下做到这一点
SELECT *
FROM TBL
WHERE COL <> '7' AND COL <> '10' AND COL <> '21'
但是,相反,写类似
SELECT *
FROM TBL
WHERE COL NOT IN (@IDS)
尝试该示例时,如果@IDS
等于一个数字,则有效,但如果等于多个数字,则显示所有记录。
要弄清楚它必须是数字列表的原因,是将其传递给SQL的方式。我无法更改数据的传递方式。
要澄清更多,因为我应该在原始问题中说过。我不知道要传递到SQL语句中的确切数字,我提供的数字仅用于示例,但是它可以是任何数字。
答案 0 :(得分:3)
您可以这样写:
WHERE COL NOT IN (7, 10, 21)
如果要传递字符串,则可以将其拆分。在SQL Server 2016+中,您使用string_split()
(对于Web上的早期版本,您可以获得SPLIT()
函数)。
WHERE COL NOT IN (SELECT * FROM STRING_SPLIT('7,10,21'))
请注意,这会将字符串转换为整数,这可能会阻止使用索引。所以:
WHERE COL NOT IN (SELECT CONVERT(INT, value) FROM STRING_SPLIT('7,10,21'))
或NOT EXISTS
:
WHERE EXISTS (SELECT
FROM STRING_SPLIT('7,10,21')
WHERE ?.COL = TRY_CONVERT(INT, value)
)