我有一个用字符串编写的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