2012-08-13 63 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)