2013-03-22 31 views
-4

我想刪除這個動態sql的引號,所以它只是一個腳本。從動態sql刪除引號的問題

set @sqlDNB= ' 
SELECT DISTINCT 
        Null CustomerID 
        ,EntityID MCVID 
        ,business_name CustomerName 
        ,physical_City + ',' + physical_state + '' + cast(physical_zip as varchar(7)) Address 
        ,'' RM 
        ,'' SubGroup 
        ,'' HierarchyType 
        ,'' status 
        ,DNB.dunsnum DunsNumber 
        ,'DNB' Source 
       from SOR.T_DunAndBradstreet DNB with (nolock) 
       left outer join SOR.T_McvDuns MCVDUNS with (nolock) 
       on DNB.dunsnum = MCVDUNS.DunsNumber 
       + 
case 
when @p_SearchMethod ='BeginsWith' and @p_CustomerName !='' then 'and business_name like ''' + @p_CustomerName + ''' ' 
when @p_SearchMethod ='Contains' and @p_CustomerName !='' then 'and Contains (business_name,''"' + @p_CustomerName + '"'')' 
when @p_SearchMethod ='Exact' and @p_CustomerName !='' then 'and business_name =''' + @p_CustomerName + ''' ' 
else 
'' 
end 

+ ' where not exists 
(select dunsnumber from sor.T_Customer customer where customer.DUNSnumber = DNB.dunsnum ' 
+ 
case 
when @p_SearchMethod ='BeginsWith' and @p_CustomerName !='' then 'and customer.Name like ''' + @p_CustomerName + ''' ' 
when @p_SearchMethod ='Contains' and @p_CustomerName !='' then 'and Contains (customer.Name,''"' + @p_CustomerName + '"'')' 
when @p_SearchMethod ='Exact' and @p_CustomerName !='' then 'and customer.Name =''' + @p_CustomerName + ''' ' 
else 
'' 
end 

if @p_TIN_SSN !='' 
begin 
set @sqlDNB = @sqlDNB + ' and customer.TINorSSN =''' + @p_TIN_SSN + ''' ' 
end 
if @p_CustomerID !='' 
begin 
set @sqlDNB = @sqlDNB + ' and customer.[MCVID] =''' + cast(@p_CustomerID as varchar(20)) + ''' ' 
end 
set @sqlDNB = @sqlDNB + ')' 
+1

你有什麼試過,你的問題是什麼?從這裏刪除所有引號會破壞你的代碼。 – 2013-03-22 23:45:22

+0

我不明白...你爲什麼不把它們刪除。 – Rob 2013-03-22 23:46:34

+0

我試圖從case語句中刪除引號,但在那裏有一個語句('和商業名稱'),如果我刪除所有引號,它會引發錯誤。我如何在不破壞邏輯的情況下刪除所有引號? – mike 2013-03-22 23:49:54

回答

1

刪除從下面的代碼的任何單引號將導致一個錯誤:當你永遠在SQL看到''字符串裏它代表一個'

'and business_name like ''' + @p_CustomerName + ''' ' 

。例如,

declare @test varchar(12) 
set @test = 'don''t' 
select @test 

將返回don't

因此,從您提到的代碼塊中刪除任何單引號將使您的like中斷。

希望這是有道理的。

+0

感謝安倍的回覆。所以我無法刪除引號並將此腳本作爲非動態sql?它需要很長的時間來執行 – mike 2013-03-23 00:01:41

1

一種方便的方法,以「調試」這種在SQL Server Management Studio中的腳本如下:

DECLARE @sqlDNB nvarchar(max); 

set @sqlDNB = <your script here>; 

PRINT @sqlDNB; 

如果你運行它,你會得到,你可以用它來修改特定的錯誤信息你的腳本。最後,打印的字符串是SQL腳本,您也可以複製和測試它。

+0

嗨Josien,實際上我需要擺脫動態SQL並將其作爲一個SQL腳本。 – mike 2013-03-23 00:03:28

+0

上面的打印結果將是您正在查找的腳本。 – Josien 2013-03-23 00:11:30