2017-05-17 24 views
0

我很難格式化與SP_executesql一起使用的字符串。我不斷收到以下錯誤:創建要與exec一起使用的SQL字符串sp_executesql @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

的最後一行看起來像你忘了第一GETDATE轉換()到varchar。

+0

我認爲錯誤我在這一段代碼 '選擇不同PROVIDER_ID FROM提供商光伏WHERE PROVIDER_ID IN(選擇PROVIDER_ID從## sanctiontermswid)和ps.provider_status_type_id = ''' + @changestring + ''」 ))' – schalld

+0

嗯,我改變了第一個GETDATE()爲「CONVERT(VARCHER(20),GETDATE())」並沒有錯誤。由此產生的字符串看起來不正確,但你應該能夠從那裏進行更改。只需在最後添加「SELECT @Sql」,以便您可以看到結果並相應地進行更改。 – LeopoldVonBuschLight

0

能夠最終格式化我的SQL。問題在於格式化案例陳述。

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))'