Разделение строки в столбце таблицы, которая имеет несколько значений в отдельные строки - PullRequest
0 голосов
/ 24 октября 2019

Используя SQL Server Management Studio 2016, у меня есть столбец, в котором, если есть разделитель ;, мне нужно разделить значения на две отдельные строки.

Я могу разделить значения для одного значенияно это не работает, когда мне нужно сделать это для столбца в таблице

Значения таблицы:

Server Environment
S23     PROD, DEV
S24     PROD

Query One:

 SELECT [server], STRING_SPLIT([Environment]), ';')
   FROM [[dbo].[serverstable]

Query Two:

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

1 Ответ

2 голосов
/ 24 октября 2019

split_string возвращаемое значение равно table, поэтому его нельзя использовать в качестве столбца

SELECT [server], STRING_SPLIT([Environment]), ';')
FROM [[dbo].[serverstable]

Таким образом: оно выдаст вам эту ошибку:

enter image description here

Что вам нужно: cross join t1.environment значения

 SELECT [server], t2.value
 FROM [dbo].[serverstable] t1
 CROSS APPLY STRING_SPLIT(t1.[Environment], ';') t2
...