奇怪的问题。当我在一台SQL Server上创建存储过程时,它会成功,但是在另一台SQL Server上,完全相同的代码会失败。当“ dbo.Split中的select s”行被删除时,它们都成功
错误是
消息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
)
尝试将其用作外部应用。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句