为什么在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
答案 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 ;