Loading...
p.mitov avatar p.mitov 6 Точки

[Technical Issue] MS SQL - Използване на променливи в SELECT statement

Здравейте, колеги,

Имам следното затруднение - опитвам се да изтегля от няколко бази/сървъри (MS SQL) еднакви данни от еднакви таблици и да ги обединя с UNION.

Въпросът е в това, че става много дълго и нечетливо, когато се теглят 10 колони, които се описват във всеки SELECT.

Та, мисълта ми е да се направи променлива, в която да се забие списъка с колони като стринг и след това вместо това:

SELECT col01, col02, ..., col10 FROM table1
UNION
SELECT col01, col02, ..., col10 FROM table2
UNION
...
SELECT col01, col02, ..., col10 FROM table32

да се получи следното:

DECLARE @my_var nvarchar(500);
SET @my_var = 'col1, col2, ..., col10';
SELECT   @my_var   FROM table1
UNION
SELECT   @my_var   FROM table2
UNION
...
SELECT   @my_var   FROM table2

Но, тази заявка връща една колона със съдържанието на @my_var като стринг (който е 'col1, col2, ..., col10') за всеки ред. Т.е., не използва стойността на променливата като дефиниция за SELECT, а я използва само като стринг.

Ако някой има идея или направо знае как се прави, моля да сподели.

Благодаря предварително!

Поздрави,
Пламен

Тагове:
1
Databases Basics 25/06/2015 14:07:41
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Здравей,

Трябва да направиш цялото query като стринг, след което можеш да го подадеш на предефинираната сторната процедура sp_executesql.

Например

DECLARE @columns nvarchar(50)
SET @columns = 'FirstName, LastName, Salary'

DECLARE @sql nvarchar(max)
SET @sql = 'SELECT ' + @columns + ' FROM Employees '
SET @sql = @sql + ' UNION ALL SELECT ' + @columns + ' FROM Managers'

EXECUTE sp_executesql @sql

2
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.