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て確認する方法は? sqlEMPTYチェックによる

@FieldName +  '] !='''

それはエラーをスローします

文字列 '' の後の引用符が閉じていません。

これを克服する方法は?

4

2 に答える 2

1

交換する必要があります

 @FieldName + '] !=''' 

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

文字列内で引用符を使用する場合は、エスケープする必要があります。元のステートメントでは、引用符を 1 つだけエスケープした結果、引用符が 1 つだけの文字列になりました。

しかし、パラメータ化された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 に答える