存储过程在一台机器上成功但在另一台机器上失败?

时间:2014-03-17 13:07:25

标签: sql sql-server

奇怪的问题。当我在一个SQL服务器上创建存储过程时,它成功但在另一个SQL服务器上完全相同的代码失败。当“删除dbo.Split”中的行被删除时,他们都成功了

错误是

  

Msg 102,Level 15,State 1,Procedure DeliveryReportFFF,第38行   'd2'附近的语法不正确。
  消息102,级别15,状态1,过程DeliveryReportFFF,行65   '+'附近的语法不正确。
  消息102,级别15,状态1,过程DeliveryReportFFF,行75   ')'附近的语法不正确。
  消息156,15级,状态1,程序DeliveryReportFFF,第81行   关键字“AS”附近的语法不正确。
  消息156,第15级,状态1,程序DeliveryReportFFF,第87行   关键字“AS”附近的语法不正确。
  消息156,第15级,状态1,程序DeliveryReportFFF,第93行   关键字“AS”附近的语法不正确。
  信息156,第15级,状态1,程序DeliveryReportFFF,第101行   关键字“ORDER”附近的语法不正确。

第一个错误抱怨d2.​​DeliveryLocation是Split的参数。

SSMS版本是2012年。这里可能出现什么问题?

SELECT 
   row_number() over (order by o.OrderNumber, d2.DeliveryNumber, pd.TariffType) as Row 
   , d.BookTime
   , d2.DeliveryRoute
   , (select s from dbo.Split(' ', d2.DeliveryLocation) where pn = 2) as SorterExit
   , d2.DeliveryLocation
FROM Delivery d WITH (NOLOCK)

拆分UDF如下所示:

ALTER FUNCTION [dbo].[Split] (@sep nchar(1), @s nvarchar(512))
RETURNS table
AS
RETURN (
    WITH tokens(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@sep, @s)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
      FROM tokens
      WHERE stop > 0
    )
    SELECT pn,
      SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
    FROM tokens
  )

1 个答案:

答案 0 :(得分:2)

尝试将其用作外部申请。

SELECT row_number() over (order by o.OrderNumber, d2.DeliveryNumber, pd.TariffType) as Row 
, d.BookTime
, d2.DeliveryRoute
, s.s as SorterExit
, d2.DeliveryLocation
FROM Delivery d WITH (NOLOCK)
OUTER APPLY dbo.Split(' ', d2.DeliveryLocation) as s