【问题标题】:stored procedure succeeds on one machine but fails on another?存储过程在一台机器上成功但在另一台机器上失败?
【发布时间】:2014-03-17 22:07:11
【问题描述】:

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

错误是

消息 102,级别 15,状态 1,过程 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
  )

【问题讨论】:

  • 失败怎么办?什么错误信息?
  • 两台服务器上都有Split功能吗?
  • 两台服务器上的拆分功能是否相同,您是否有权在两台服务器上拆分?我的猜测是您缺少权限。尝试权限的简单测试:select * from [dbo].[Split] (' ', null)
  • @t-clausen.dk 毫无意义地猜测 OP 何时可以告诉我们错误消息。
  • 好的,在错误信息中编辑

标签: sql sql-server


【解决方案1】:

尝试将其用作外部应用。

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

【讨论】:

    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多