GO
/****** Object: UserDefinedFunction [dbo].[func_splitid] Script Date: 05/28/2019 14:21:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[func_splitid]
(@str varchar(max),@split varchar(10))
RETURNS @t Table (c1 nvarchar(100))
AS
BEGIN
DECLARE @x XML
SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>')
INSERT INTO @t SELECT x.item.value('@id[1]', 'nvarchar(100)') FROM @x.nodes('//items/item') AS x(item)
RETURN
END
select * from [dbo].func_splitid((case when 1=1 then '1' else '2' end),'')
问题找到了,比较了两个数据库的设置,原来是compatibility_level 这个参数不同,大概是兼容性等级。
旧数据库是100,新数据是80,执行下面的操作,新数据库也没问题了
alter database basename
set compatibility_level=100
你遇到的问题很可能与不同的兼容性等级有关。在你的新账套中,数据库的兼容性等级可能低于原始账套中的等级,导致在新账套中执行时报错。你可以通过将新账套的兼容性等级设置为与原始账套相同来解决这个问题。你可以使用以下命令更改数据库的兼容性等级:
alter database databasename set compatibility_level = 100
其中databasename是你要更改兼容性等级的数据库的名称,100是你要设置的兼容性等级。