Софтуерно Инженерство
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 SoftUni Team Trainer 6883 Точки
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