2012-08-13 54 views
1
SET @sql = 'Declare ChildTableMigrator CURSOR FOR select ['[email protected]+'] , ['[email protected]+'Alias] from [' + @SourceTable + '].[dbo].[Port] where [' + @SourceTable + '].[dbo].[Port].[' + @FieldName + '] IS NOT NULL AND [' + @SourceTable + '].[dbo].[Port].[' + @FieldName + '] !=''' 

PRINT @sql 
exec sp_executesql @sql 

嗨動態查詢,SQL與空管檢查

如何檢查NULLEMPTYsql動態查詢? ,按EMPTY檢查

@FieldName + '] !=''' 

它thorws錯誤

閉合的引號的字符串 '' 之後。

如何克服這一點?

+1

你已經得到了'print'說法正確的有 - 你不是*在打印的查詢中查看* – 2012-08-13 08:18:42

+0

請勿使用'['+ @ FieldName +']',而是使用''+ quotename(@FieldName)+''。當我使用'set @FieldName ='omg] thisfails''作爲您的解決方案崩潰的字段名稱時。 – 2012-08-13 08:49:44

回答

1

您需要

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

引號替換

@FieldName + '] !=''' 

需要在字符串中使用時必須逃脫。在您的原始聲明中,您僅轉義了一個引號,導致只有一個引號的字符串。

但是你可以做,甚至通過使用參數化的SQL更好

@FieldName + '] [email protected] 
exec sp_executesql @sql, N'@EmptyField VARCHAR(32)', '' 
+0

感謝工作好會在5分鐘內接受 – Sudantha 2012-08-13 08:20:27

1

如果使用()判斷。例如

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

PRINT @sql 
exec sp_executesql @sql 
+0

感謝您的回答! – Sudantha 2012-08-13 08:21:05