Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 STRING_SPLIT - присвоить алиас правильно  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19271
Есть простая конструкция (схематично):

SELECT id
FROM table
CROSS APPLY STRING_SPLIT(@param1, ',')
CROSS APPLY STRING_SPLIT(@param2, ',')
WHERE ...


Само собой, использовать такое невозможно - оба STRING_SPLIT производят одноколоночный rowset, причём поле в обоих имеет имя value, и фиг сошлёшься, ибо нет алиаса таблицы. Та же проблема, если вместо CROSS APPLY использовать любой JOIN.

Вроде чего проще - дай алиас, типа

CROSS APPLY STRING_SPLIT(@param1, ',') AS param1(value)


Ан нет - немедленно получаешь сообщение, что функция STRING_SPLIT не определена.

Понятно, что задача элементарно решается какой-нибудь конструкцией типа

SELECT id
FROM table
CROSS APPLY (SELECT value FROM STRING_SPLIT(@param1, ',')) AS param1(value)
CROSS APPLY (SELECT value FROM STRING_SPLIT(@param2, ',')) AS param2(value)
WHERE ...


или то же в CTE - но как бы "на глаз" явно избыточный подзапрос.

Вопрос: можно ли заалиасить без подзапроса? если да - как именно?
5 сен 19, 11:49    [21964379]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT - присвоить алиас правильно  [new]
invm
Member

Откуда: Москва
Сообщений: 8739
CROSS APPLY STRING_SPLIT(@param1, ',') AS param1
5 сен 19, 11:56    [21964387]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT - присвоить алиас правильно  [new]
invm
Member

Откуда: Москва
Сообщений: 8739
Когда можно указывать алиасы столбцов описано в документации - https://docs.microsoft.com/ru-ru/sql/t-sql/queries/from-transact-sql?view=sql-server-2017
5 сен 19, 12:06    [21964394]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT - присвоить алиас правильно  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6498
Akina,

автор
SELECT
a.*
,a = x.Value
,b = y.Value
FROM test a
CROSS APPLY STRING_SPLIT(a.Val, ',') as x
CROSS APPLY STRING_SPLIT(a.Val, ',') as y
5 сен 19, 12:07    [21964396]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT - присвоить алиас правильно  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6498
автор
или то же в CTE - но как бы "на глаз" явно избыточный подзапрос.

ну разворачивает в тоже самое
5 сен 19, 12:13    [21964403]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT - присвоить алиас правильно  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19271
Гм... доупрощался, называется.

На самом деле основное-то, что хотелось и что я напрасно опустил - это конечное желание переименовать само поле. Т.е. получить не аналог
CROSS APPLY STRING_SPLIT(@param1, ',') AS param1(value)
а аналог
CROSS APPLY STRING_SPLIT(@param1, ',') AS param1(param1)
решаемый конструкцией
CROSS APPLY (SELECT value FROM STRING_SPLIT(@param1, ',')) AS param1(param1)
5 сен 19, 13:09    [21964477]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить