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

Откуда:
Сообщений: 517
День добрый!
Чего-то торможу с утра, не получается написать табличную функцию :(
Есть несколько иденчтичных по строению таблиц в различных схемах:
create table schema1.MyTable (Id int, Name nvarchar(50))
create table schema2.MyTable (Id int, Name nvarchar(50))
create table schema3.MyTable (Id int, Name nvarchar(50))

insert into schema1.MyTable 
select 1,'a' union
select 2,'b'

insert into schema2.MyTable 
select 1,'aa' union
select 2,'bb'

insert into schema3.MyTable 
select 1,'aa' union
select 2,'bbb'

Нужно получить таблицу такого вида:
SchemaNameIdName
schema11a
schema12b
schema21aa
schema22bb
schema31aaa
schema32bbb

можно конечно сделать UNION между селектами из каждой таблицы, но если речь идет о порядка 50 таблиц, то не очень логично....
Нужна именно функция.
Спасибо!
20 янв 14, 11:37    [15439355]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз написать функцию.  [new]
Glory
Member

Откуда:
Сообщений: 104760
abrashka
Нужна именно функция.

И что должна сделать эта функция ?
Выполнить 50 раз UNION в фоновом режиме ?
20 янв 14, 11:41    [15439379]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз написать функцию.  [new]
abrashka
Member

Откуда:
Сообщений: 517
Glory,

вопрос или можно это сделать динамически, чтоб не писать вручную 50 селектов, а чтоб функция сделала селект из всех таблиц с именем MyTable
20 янв 14, 11:44    [15439411]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз написать функцию.  [new]
Glory
Member

Откуда:
Сообщений: 104760
abrashka
вопрос или можно это сделать динамически, чтоб не писать вручную 50 селектов, а чтоб функция сделала селект из всех таблиц с именем MyTable

А вы прочитайте список разрешенных в функциях команд.

А потом прочитайте про представления/view
20 янв 14, 11:46    [15439438]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз написать функцию.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Т.е. нужно каждый раз при кажом запросе делать динамический селект, жутко неэффективный, чем один раз ниписать UNION?
SELECT 'UNION ALL SELECT * FROM ',Schema_Name([schema_id]),'.',name FROM sys.tables WHERE name = 'MyTable'
20 янв 14, 11:47    [15439448]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз написать функцию.  [new]
abrashka
Member

Откуда:
Сообщений: 517
Mnior,

Union уже написал :)
Думал, что есть более "красивый" способ.
Спасибо всем!
20 янв 14, 11:50    [15439475]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз написать функцию.  [new]
Glory
Member

Откуда:
Сообщений: 104760
abrashka
Думал, что есть более "красивый" способ.

Не создавать кучу одинаковых таблиц
20 янв 14, 11:52    [15439489]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить