2012-08-13 120 views
0

我在我的存儲過程中有T-SQL語句,它給了我error.But相同的查詢在查詢窗口中運行得非常好。 它給錯誤說T-SQL查詢語法不正確

Incorret語法近'。'

Set @SQL='Select ''<a href="javascript:editTicketByIDAction('' + 
      CONVERT(VarChar(Max), Ticket) + '')">'' + 
      CONVERT(VarChar(Max),t1.Ticket) + 
      ''</a>'' t1.Ticket,VendorTicket[Vendor Ticket], Comments 
From VendorTickets t1 
WHERE NotifyOn <= GetDate() And NotifyOn Is Not Null AND 
NOT EXISTS(SELECT * FROM VendorTickets t2 
WHERE t1.Ticket = t2.Ticket AND t1.InitiatedOn < t2.InitiatedOn)' 

Exec(@SQL) 

沒有T-SQL它工作得很好

SELECT t1.Ticket,t1.VendorTicket,t1.Comments 
FROM VendorTickets t1 WHERE 
NOT EXISTS(SELECT * FROM VendorTickets t2 
WHERE t1.Ticket = t2.Ticket AND t1.InitiatedOn < t2.InitiatedOn) 
AND NotifyOn <= GetDate() And NotifyOn Is Not Null 
+0

爲什麼用戶'EXEC'而不是'sp_executeSql'?無論如何,'@ SQL'在工作中看起來像什麼? Ticket字段中是否有「。」? – Jodrell 2012-08-13 10:44:24

+0

先寫下你的查詢*,但不要帶'SET @SQL ='。這將允許更簡單的調試。然後,一旦它工作,您可以將其返回到動態SQL佈局。 *(儘管我完全不知道爲什麼你會使用動態SQL?)* – MatBailie 2012-08-13 10:45:13

+0

您是否想要別名列?在這種情況下,你應該在最後一個撇號後刪除't1.'。 – 2012-08-13 10:59:53

回答

6

你缺少一個+

... + '</a>' + t1.Ticket ... 
      ^------------------------here 
+0

因此,「相同」的查詢在查詢窗口中運行得不好。我認爲是這樣的... – usr 2012-08-13 10:42:46

+0

xObj = {「算術溢出錯誤將varchar轉換爲數據類型數字。」} – Shaggy 2012-08-13 10:46:08

+0

@SagarDumbre:如果它不是有效數字,則不能將其轉換爲數字。 – 2012-08-13 10:48:42

0

你錯過了在兩個地方+。試試這個:

Set @SQL='Select + ''<a href="javascript:editTicketByIDAction('' + 
      CONVERT(VarChar(Max), Ticket) + '')">'' + 
      CONVERT(VarChar(Max),t1.Ticket) + 
      ''</a>'' + t1.Ticket,VendorTicket[Vendor Ticket], Comments 
From VendorTickets t1 
WHERE NotifyOn <= GetDate() And NotifyOn Is Not Null AND 
NOT EXISTS(SELECT * FROM VendorTickets t2 
WHERE t1.Ticket = t2.Ticket AND t1.InitiatedOn < t2.InitiatedOn)' 

Exec(@SQL)