SQL动态查询与空检查

时间:2012-08-13 08:10:37

标签: sql sql-server-2008

SET @sql = 'Declare  ChildTableMigrator  CURSOR FOR  select ['+@FieldName+'] , ['+@FieldName+'Alias] from ['  + @SourceTable + '].[dbo].[Port] where ['  + @SourceTable + '].[dbo].[Port].[' + @FieldName +  '] IS NOT NULL AND ['  + @SourceTable + '].[dbo].[Port].[' + @FieldName +  '] !='''

PRINT @sql
exec sp_executesql @sql

您好,

如何使用NULL动态查询检查EMPTYsql? ,根据EMPTY检查

@FieldName +  '] !='''

它消除了错误

  

字符串''后面的未闭合引号。

如何克服这个问题?

2 个答案:

答案 0 :(得分:1)

您需要替换

 @FieldName + '] !=''' 

 @FieldName + '] !='''''.

在字符串中使用时,需要转义引号。在原始语句中,您只转义了一个引号,导致只有一个引号的字符串。

但是你可以通过使用参数化的sql

做得更好
 @FieldName + '] !=@EmptyField
 exec sp_executesql @sql, N'@EmptyField VARCHAR(32)', ''

答案 1 :(得分:1)

使用if()判断。例如

 set @sql="Declare  ChildTableMigrator  CURSOR FOR  select "
if(@FieldName!=null)
   begin
      set @sql=@sql+"['"+@FieldName+"']";
   end
 .....

PRINT @sql
exec sp_executesql @sql