2013-04-01 135 views
-1

奇怪的錯誤這是我在存儲過程中存儲過程

BEGIN 

SET NOCOUNT ON; 
declare @SQL as varchar(4000) 

set @SQL = 'CREATE VIEW vw_GCS_Export 
    As 
    select division, [primary image id],[Item Number], [Brand Name],[Marketing Description], 
    [Colours]as Colors,[Live Date],[Sample Type],substring([FileName],charindex('+ CHAR(39) + '_' + CHAR(39) +',[FileName],1)+1,CHARINDEX('+ CHAR(39) + '.' + CHAR(39) +',[FileName],1)-5) as BatchID, 
    '+ CHAR(39) + '670' + CHAR(39) +' as Status, [Primary image ID] + '+ CHAR(39) + '_P' + CHAR(39) +' as [Shot Name], 
    Cast(Null as varchar(50))as [Swatch/Variation],Cast(Null as varchar(50))as [Alternate Shot],[UserName],''' + CAST(convert(date,Sysdatetime(),110)as varchar(10)) + ''' as [Import Date], 
    Cast(Null as varchar(50))as [Return Instructions],Cast(Null as varchar(50))as [Rush Request], DATEADD(WEEKDAY,-5,[live date]) as [ImageDeliveryDate], 
    ' + convert(varchar(50), ' + ' + CHAR(39) + 'Division ' + CHAR(39) +' + [Division] + '+ CHAR(39) + ' * ' + CHAR(39) +' + [UserName]) as JobName 
    from Sheet1$' 


EXEC @SQL 
select * from vw_GCS_Export 

END 

動態SQL我在執行

Incorrect syntax near the keyword 'EXEC'. 

得到一個錯誤,我不知道爲什麼。我在SQL語句中似乎沒有任何錯誤。

+0

我不認爲這是問題的根源 - 但你傳遞給'EXEC()'的字符串應該是'NVARCHAR'(而不是'VARCHAR') –

回答

5

您需要括號:

EXEC (@sql) 

How to run generated SQL from a variable?

+0

我添加了帶相同結果的括號。我之前做過這種格式,但從未遇到過問題。它幾乎就像sql語句沒有結束。 –

+0

@TimVavra你可以測試[this](http://pastebin.com/T20NQVv4)是否適合你? – Kermit

2

您的實際問題是在這裏:

' + convert(varchar(50), ' 

你有CONVERT沒有第二個參數。它可以被你的意思是包括無論是在動態SQL的CONVERT或你的意思是有這部分

' + [UserName]) as JobName 

爲您CONVERT的結束,但在任何情況下,它不會編譯和你的語法搗毀。

+0

(*** Dohh !! ***) – Kermit

+0

我做出了您建議的更正,它仍然會產生相同的錯誤。我有一個沒有轉換的存儲過程的副本,除了浮點錯誤外,其運行良好。這只是一個隱含的轉換,我可以關閉? –

+0

@TimVavra聽起來您的字符串創建語法中有其他問題。你將需要一步一步地查看是什麼導致了問題,並且SO實際上不是一個地方 - 這是**你的**查詢中的一個問題,它永遠不會幫助其他任何人,因爲它基於特定於您的情況的東西。你只需要通過它來解決它。 – JNK

0

這裏是我結束了:

SET NOCOUNT ON; 
declare @SQL as varchar(4000) 

set @SQL = 'CREATE VIEW vw_GCS_Export 
    As 
    select division, [primary image id],[Item Number], [Brand Name],[Marketing Description], 
    [Colours]as Colors,[Live Date],[Sample Type],substring([FileName],charindex('+ CHAR(39) + '_' + CHAR(39) +',[FileName],1)+1,CHARINDEX('+ CHAR(39) + '.' + CHAR(39) +',[FileName],1)-5) as BatchID, 
    '+ CHAR(39) + '670' + CHAR(39) +' as Status, [Primary image ID] + '+ CHAR(39) + '_P' + CHAR(39) +' as [Shot Name], 
    Cast(Null as varchar(50))as [Swatch/Variation],Cast(Null as varchar(50))as [Alternate Shot],[UserName],''' + CAST(convert(date,Sysdatetime(),110)as varchar(10)) + ''' as [Import Date], 
    Cast(Null as varchar(50))as [Return Instructions],Cast(Null as varchar(50))as [Rush Request], DATEADD(WEEKDAY,-5,[live date]) as [ImageDeliveryDate], 
    ' + CHAR(39) + 'Division ' + CHAR(39) +'+ cast([Division] as varchar(50)) + '+ CHAR(39) + ' * ' + CHAR(39) + ' + [UserName] as JobName 
    from Sheet1$' 


    EXEC (@SQL) 
    select * from vw_GCS_Export 

的關鍵是,我不能使用對整個字符串中投,我只能把它放在浮動場[司。我感謝所有的幫助FreshPrinceofSO