【发布时间】:2021-10-05 03:08:03
【问题描述】:
首先范围是在SQL Server 2000 兼容性下运行的数据库
我有一个用于拆分字符串的自定义函数
CREATE FUNCTION dbo.splitstring ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT
@pos = CHARINDEX(',', @stringToSplit),
@name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT ltrim(RTRIM(@name))
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos + 1, LEN(@stringToSplit) - @pos)
END
INSERT INTO @returnList
SELECT ltrim(RTRIM(@stringToSplit))
RETURN
END
效果很好。
现在是我的问题
我有这些数据:
由以下 SQL 产生:
with CTE as
(
select '1' CustomerID, 'BCONS1' Code union
select '1', 'BCONS2' union
select '2' CustomerID, 'BCONS1' Code union
select '2', 'BCONS2'
)
select *
from CTE where CustomerID = 1
union
select Null, s.Name from dbo.splitstring('ACONS1,ACONS2,ACONS3') S
如何将“缺失”的 CustomerID 添加到我的结果中?
【问题讨论】:
-
您“缺失”的 CustomerID 的值是多少?如果是
1,为什么不` ... select 1, s.Name from dbo.splitstring('ACONS1,ACNS2,ACONS3') S`? -
您确定您使用的是 SQL Server 2000 吗?根据我在上面使用的 Google-Fu CTE,直到 SQL Server 2005 才受支持。但实际上,您已经很久没有使用受支持的版本了。 2000 已完全在近 8 年中不受支持。
-
这是一个运行兼容模式 2000 的 SQL Server 2008
-
@Zhorov 我需要为每个客户获取允许位,用于代码 ACONS1、ACNS2、ACONS3。如果缺少其中一个代码,我需要将它们添加到我的选择中
-
@JensBorrisholt 没有理由等待 15 年进行升级。这只会增加运行当前数据库的成本和不可避免的迁移成本。您尝试做的只是所有支持版本中的
STRING_SPLIT
标签: sql sql-server tsql sql-server-2008