为什么以下Dynamic Query返回NULL?

时间:2017-09-30 08:00:47

标签: sql-server

为什么在Query下面返回null而不是动态查询?

declare @Query Nvarchar(2000),
@IdentificationNo Nvarchar(255)=NULL

Set @Query='select VD.* from VWNROCDetail VD Where' 
Set @Query=@Query+'((NROCApplicationId like ''%' + @IdentificationNo + '%'')OR (ISNULL('''+@IdentificationNo+''','''') = ''''))'

select @Query

3 个答案:

答案 0 :(得分:1)

因为@IdentificationNo为NULL。你需要使用COALESCE(@IdentificationNo,'')或类似的东西。

'A' + NULL + 'B' 

返回Null 而

'A' + '' + 'B'

返回'AB'

答案 1 :(得分:1)

字符串连接中的结果为null。因为您的变量@IdentificationNo为null。如果将NULL附加到任何String,则结果始终为NULL。

不确定您要归档的内容,但是您应该查看sp_executesql过程。 例如:

EXEC sp_executesql N'《your statement using @p1 as variable》', N'@p1 NVARCHAR(255)', @p1 = @IdentificationNo;

如果您解释声明,我可以提供一些帮助。

答案 2 :(得分:1)

我同意艾伦。现在,用concantenation构建查询真的有必要吗?在你的情况下,你可以这样做:

declare @IdentificationNo Nvarchar(255)=NULL;

select VD.* from VWNROCDetail VD 
Where VD.NROCApplicationId like '%' + @IdentificationNo + '%' or @IdentificationNo is null ;