首页 > 解决方案 > IF EXISTS 不返回正确的结果

问题描述

我必须检查我的 sql 表中的列是否有空值并打印“是”/“否”

DECLARE @columnName nvarchar(50)

SET @columnName = 'City'

IF EXISTS (SELECT 1 FROM rf.Country WHERE @columnName IS NULL)
BEGIN
    PRINT 'Yes'
END
ELSE
BEGIN
    PRINT 'No'
END

当我确定此列中有空值时,此查询返回“否”。我看到不允许在 WHERE 语句中使用 @var ,但我需要一种方法来循环遍历表中的所有列,并在每列包含 NULL 值时打印每列的结果。

标签: sqltsql

解决方案


您需要安全地将值注入动态查询,然后执行:

DECLARE @ColumnName sysname; --synonym for nvarchar(128) NOT NULL
SET @ColumnName = N'City';

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = CHAR(13) + CHAR(10);

SET @SQL = N'IF EXISTS (SELECT 1 FROM rf.Country WHERE ' + QUOTENAME(@ColumnName) + N' IS NULL)' + @CRLF +
           N'    PRINT N''Yes'';' + @CRLF +
           N'ELSE' + @CRLF +
           N'    PRINT N''No'';';

--PRINT @SQL;  --Your debugging friend

EXEC sys.sp_executesql @SQL;

推荐阅读