1
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

你好,

如何检查NULLEMPTY使用sql动态查询?, 根据EMPTY检查

@FieldName +  '] !='''

它抛出了错误

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

如何克服这一点?

4

2 回答 2

1

你需要更换

 @FieldName + '] !=''' 

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

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

但是你可以通过使用参数化的 sql 做得更好

 @FieldName + '] !=@EmptyField
 exec sp_executesql @sql, N'@EmptyField VARCHAR(32)', ''
于 2012-08-13T08:15:33.547 回答
1

使用 if() 判断。例如

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

PRINT @sql
exec sp_executesql @sql
于 2012-08-13T08:17:16.493 回答