У меня есть вид, который разбивает список с разделителями.Например, если у вас есть следующая таблица со следующими двумя столбцами:
ABC, A;B;C
Принимая имя «TestView», вы получите следующее:
Label Source
--------------
ABC A
ABC B
ABC C
Код получен изздесь: Разделение одного столбца на несколько строк
Когда я пытаюсь поместить условие в предложение where в представлении, я получаю сообщение об ошибке.Msgstr "Неверный параметр длины, переданный в функцию LEFT или SUBSTRING."Так что что-то вроде «select * from TestView, где Source = 'A'» вызовет эту ошибку.
Вот код из представления:
CREATE VIEW [dbo].[TestView]
AS
WITH L0 AS (SELECT 1 AS c
UNION ALL
SELECT 1),
L1 AS (SELECT 1 AS c
FROM L0 AS A,
L0 AS B),
L2 AS (SELECT 1 AS c
FROM L1 AS A,
L1 AS B),
L3 AS (SELECT 1 AS c
FROM L2 AS A,
L2 AS B),
--counts up to 256
Numbers AS (SELECT ROW_NUMBER() OVER (ORDER BY c) AS n
FROM L3)
SELECT Label,
LTRIM(RTRIM(SUBSTRING(valueTable.Sources, nums.n, charindex(N';', valueTable.Sources + N';', nums.n) - nums.n))) AS Source
FROM Numbers AS nums
JOIN dbo.SourceTable AS valueTable ON nums.n <= CONVERT(int, LEN(valueTable.Sources))
AND SUBSTRING(N';' + valueTable.Sources, n, 1) = N';'