2017-05-17 2 views
0

SP_executesqlで使用する文字列の書式設定に問題があります。あなたが最初GETDATEを変換するために忘れているように見えますexec sp_executesql @sqlで使用するSQL文字列を作成する

Msg 102, Level 15, State 1, Line 144
Incorrect syntax near '))'

ライン144は

すべての変数が

set @Sql = @Sql + ' select distinct provider_id, ' + @changestring + ',  null,''' 
    + 'case when ' + @changestring + '= 6 then ds.excldate + 
    else + 

    CONVERT(varchar(20),' + GETDATE() + ') end as '+ '''Effective_Date' 
    + ''', null,1,' + @username + ''' 
    + ,NULL,' + CONVERT(varchar(20), GETDATE()) + ''',''' + CONVERT(varchar(20), GETDATE()) + ''', '''+ @username + '''' + 
    ' from ( 
    select distinct provider_id 
    FROM provider pv WHERE provider_id In (select Provider_id from dbo.##sanctiontermswid )) ds 
    where ds.provider_id not in (
    select provider_id from provider_status ps where ps.provider_id in (
    select distinct provider_id 
    FROM Provider pv WHERE provider_id IN (select Provider_ID from ##sanctiontermswid) and ps.provider_status_type_id = ' + @changestring + '))' 

答えて

0

上で宣言されたこのコードの最後の行は次のとおりです。私は次のエラーを得続けます()をvarcharに変換します。

+0

私は ' '+ @changestring + ''' PROVIDER_ID IN(sanctiontermswid ##からPROVIDER_IDを選択)とps.provider_status_type_id =プロバイダーPVは異なるPROVIDER_IDを選択し' エラーコードのこの部分にある私の考えます」 )) ' – schalld

+0

最初のGETDATE()を「CONVERT(VARCHER(20)、GETDATE())」に変更し、エラーは発生しませんでした。結果の文字列は正しく表示されませんでしたが、そこから変更を加えることができます。最後に「SELECT @Sql」を追加するだけで結果を確認して変更を加えることができます。 – LeopoldVonBuschLight

0

最終的に私のSQLをフォーマットできました。問題は、caseステートメントをフォーマットすることにありました。

set @Sql = @Sql + 'select distinct DS.provider_id, ' + @changestring + ',    null, case when ''' + @changeString + '''!= ''6'' then ''' 
     + CONVERT(varchar(20), GETDATE()) + ' '' else CONVERT(DATE,DS.exCldate) end as ''Effective_date''' 
     + ', null,1,'''+ @username + ''' 
     ,NULL,''' + CONVERT(varchar(20), GETDATE()) + ''',''' + CONVERT(varchar(20), GETDATE()) + ''', '''+ @username + '''' + 
     ' from (
     select distinct PV.provider_id, T1.EXCLDATE 
     FROM provider pv 
     JOIN dbo.##tmpSanctions T1 ON PV.PROVIDER_ID=T1.PROVIDER_id 
     ) ds 
     where ds.provider_id not in (
     select provider_id from provider_status ps where ps.provider_id in (
      select distinct provider_id 
      FROM Provider pv WHERE provider_id IN (select Provider_ID from  dbo.##tmpSanctions) and ps.provider_status_type_id= '+ @changestring + ' and ps.effective_thru is null))' 
関連する問題