我有一个用字符串编写的SQL查询,然后使用命令Exec(string)执行,如下所示:

Declare @TestId bigint = null
Declare @Query nvarchar(max)
set @Query = 'SELECT * from Registrations where RegistrationId = 15 AND (' + CAST(@TestId AS NVARCHAR) + ' IS NULL OR TestId = ' + CAST(@TestId AS NVARCHAR) + ') '
EXEC(@Query)


现在的问题是,在字符串内部无法正确解析IS NULL,但是当我从字符串中删除IS NULL时,它可以正常工作;当@TestId取非null的值时,它可以正常工作,而问题出在@Query字符串中的IS NULL。

注意:@TestId是过程参数

我需要知道如何使SQL具有IS NULL并正确解析

提前致谢

最佳答案

如果确实需要为此使用动态sql,请使用sp_executesql像这样:

Declare @TestId bigint = null
Declare @Query nvarchar(max)
set @Query = 'SELECT * from Registrations where RegistrationId = 15 AND (@TestId IS NULL OR TestId = @TestId)'

EXECUTE sp_executesql @Query, N'@TestId BIG INT', @TestId

10-06 12:18