-4

この動的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 + ')'
4

2 に答える 2

1

SQL Server Management Studio でこの種のスクリプトを「デバッグ」する便利な方法は次のとおりです。

DECLARE @sqlDNB nvarchar(max);

set @sqlDNB = <your script here>;

PRINT @sqlDNB;

これを実行すると、スクリプトを変更するために使用できる特定のエラー メッセージが表示されます。最後に、出力された文字列は SQL スクリプトであり、それをコピーしてテストすることもできます。

于 2013-03-23T00:00:25.243 に答える
1

次のコードから一重引用符を削除すると、エラーが発生します。

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

SQL で文字列の内部を見るときはいつでも''、単一の を表しています'。例えば

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

戻りdon'tます。

したがって、言及したコード ブロックから一重引用符を削除すると、問題が発生しますlike

これが理にかなっていることを願っています。

于 2013-03-22T23:54:35.253 に答える