在 SQL WHERE IN 语句中使用变量
Using variable with SQL WHERE IN statement
我想在脚本顶部设置节点列表,然后检查它们是否在 table 中。
以下代码不会抛出错误,但逻辑不工作。当列表中的节点之一存在时,它不会打印消息。
DECLARE @nodeId nvarchar(50)
SET @nodeId = 'SomeNodeID, SomeOtherNodeID'
IF EXISTS (SELECT NodeId FROM dbo.tblNodeMaster WHERE NodeId in (@nodeId))
BEGIN
PRINT RTRIM(CONVERT(varchar(30), GETDATE())) + ' node exists.'
RETURN
END
使用以下不带变量的代码可以正常工作。当列表中的任何节点存在时,它将打印消息。
IF EXISTS (SELECT NodeId FROM dbo.tblNodeMaster WHERE NodeId in ('SomeNodeID', 'SomeOtherNodeID'))
BEGIN
PRINT RTRIM(CONVERT(varchar(30), GETDATE())) + ' node exists.'
RETURN
END
您可以使用 table variable
而不是使用字符串
Declare @NodeId table (NodeId varchar(30))
insert into @NodeId
select 'SomeNodeID' union all select 'SomeOtherNodeID'
IF EXISTS (SELECT * FROM dbo.tblNodeMaster WHERE NodeId in (select NodeId from @nodeId))
...
DECLARE @nodeId nvarchar(50) = 'SomeNodeID,SomeOtherNodeID'
IF EXISTS (SELECT * FROM dbo.tblNodeMaster WHERE NodeId IN (SELECT LTRIM(value) FROM STRING_SPLIT(@nodeId, ','))
BEGIN
PRINT RTRIM(CONVERT(varchar(30), GETDATE())) + ' node exists.'
RETURN
END
您可以使用 STRING_SPLIT 作为 IN 运算符的子查询。
我想在脚本顶部设置节点列表,然后检查它们是否在 table 中。 以下代码不会抛出错误,但逻辑不工作。当列表中的节点之一存在时,它不会打印消息。
DECLARE @nodeId nvarchar(50)
SET @nodeId = 'SomeNodeID, SomeOtherNodeID'
IF EXISTS (SELECT NodeId FROM dbo.tblNodeMaster WHERE NodeId in (@nodeId))
BEGIN
PRINT RTRIM(CONVERT(varchar(30), GETDATE())) + ' node exists.'
RETURN
END
使用以下不带变量的代码可以正常工作。当列表中的任何节点存在时,它将打印消息。
IF EXISTS (SELECT NodeId FROM dbo.tblNodeMaster WHERE NodeId in ('SomeNodeID', 'SomeOtherNodeID'))
BEGIN
PRINT RTRIM(CONVERT(varchar(30), GETDATE())) + ' node exists.'
RETURN
END
您可以使用 table variable
Declare @NodeId table (NodeId varchar(30))
insert into @NodeId
select 'SomeNodeID' union all select 'SomeOtherNodeID'
IF EXISTS (SELECT * FROM dbo.tblNodeMaster WHERE NodeId in (select NodeId from @nodeId))
...
DECLARE @nodeId nvarchar(50) = 'SomeNodeID,SomeOtherNodeID'
IF EXISTS (SELECT * FROM dbo.tblNodeMaster WHERE NodeId IN (SELECT LTRIM(value) FROM STRING_SPLIT(@nodeId, ','))
BEGIN
PRINT RTRIM(CONVERT(varchar(30), GETDATE())) + ' node exists.'
RETURN
END
您可以使用 STRING_SPLIT 作为 IN 运算符的子查询。