【发布时间】:2020-02-20 13:44:25
【问题描述】:
使用 SQL Server Management Studio 2016,我有一列,如果有分隔符 ;,那么我需要将值分成两个单独的行。
我可以将值拆分为单个值,但是当我需要对表中的列执行此操作时它不起作用
表值:
Server Environment
S23 PROD, DEV
S24 PROD
查询一:
SELECT [server], STRING_SPLIT([Environment]), ';')
FROM [[dbo].[serverstable]
查询二:
ECLARE @tags NVARCHAR(400), @Environment NVARCHAR(400)
SET @tags = (SELECT [Environment] FROM [dbo].[Servers] WHERE [SERVER] = 'S23')
SET @Environment = (SELECT [Environment] FROM [dbo].[Servers])
BEGIN
IF @Environment LIKE '%;%'
SELECT value
FROM STRING_SPLIT(@tags, ';')
IF @Environment NOT LIKE '%;%'
SELECT @Environment
END
查询一错误:
'STRING_SPLIT' 不是可识别的内置函数名称。
查询二错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
预期结果
Server Environment
S23 PROD
S23 DEV
S24 PROD
【问题讨论】:
-
SSMS 版本无关。您想知道服务器版本是什么(使用
select @@version查找)。 String_split 于 2016 年推出,要求兼容级别为 130 或更高。 -
您说您的值是用分号 (
;) 分隔的,但您的示例另有说明('PROD, DEV'是逗号 (,) 分隔的)。但是,实际上,您应该修复您的设计;在数据库中存储分隔数据只是减慢速度的一种“简单”方法。 -
我可以使用 SSMS 2017 连接到 SQL Server 2000。不代表我使用的是 SQL Server 2017。
-
好的,请忽略 SSMS 版本,是的,我的意思是写 'prod;开发'。请您能专注于帮助我解决问题,将不胜感激。我无法更改存储方法,因为我不是这方面的决策者,因此需要处理现有数据
-
我们需要知道您的 SQL Server 版本才能启动,@RyanB。