Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Динамическая компоновка запроса


Автор: Hohhi 15.11.2009, 18:54
Здраствуйте! Необходимо написать при помощи хранимой процедуры sp_executeSQL запрос, который будет состоять из столбцов указаных в параметрах и будет работать с таблицей указанной в параметрах, для начала пытаюсь разобраться с заданием трёх столбцов:
Код

USE Formula1
EXEC sp_executeSQL N'
SELECT @FirstColumn, @SecondColumn, @ThirdColumn
From Pilots ', N'@FirstColumn char(7),@SecondColumn char(4),@ThirdColumn char(20), @Table char(6)',
@FirstColumn=Surname,@SecondColumn=Name,@ThirdColumn=ChampionshipTitles,@Table='Pilots'


Результат примерно такой,
Surname    Name    ChampionshipTitles  
Surname    Name    ChampionshipTitles  
Surname    Name    ChampionshipTitles  
Surname    Name    ChampionshipTitles  
.................................................................
Surname    Name    ChampionshipTitles  
Surname    Name    ChampionshipTitles

где количество строк равно числу кортежей в отношении Pilots

Автор: kobra 16.11.2009, 14:54
Код

declare @sql nvarchar(max)
set @sql = 'select ' + @FirstColumn + ', ' + @SecondColumn + ', ' + @ThirdColumn + ' from Pilots' 
EXEC sp_executeSQL @sql

Автор: Hohhi 16.11.2009, 19:29
kobra, как в твоём варианте параметры при вызове задавать?

и почему он такую конструкцию не берёт?
Код

EXEC sp_executeSQL N'
SELECT '+ @FirstColumn+','+ @SecondColumn+','+ @ThirdColumn+'
From Pilots ', N'@FirstColumn char(7),@SecondColumn char(4),@ThirdColumn char(20), @Table char(6)',
@FirstColumn=Surname,@SecondColumn=Name,@ThirdColumn=ChampionshipTitles,@Table='Pilots'

Автор: Deniz 17.11.2009, 06:28
Hohhi, о каких параметрах идет речь?
Что нужно конкретнее опиши.

Автор: kobra 17.11.2009, 09:21
Цитата(Hohhi @  16.11.2009,  19:29 Найти цитируемый пост)
kobra, как в твоём варианте параметры при вызове задавать?
при вызове параметры уже не нужны
Цитата(Hohhi @  16.11.2009,  19:29 Найти цитируемый пост)
и почему он такую конструкцию не берёт?
не умеет и потому smile

Автор: Hohhi 17.11.2009, 12:52
Deniz, опишу конкретнее
Вот пример типажа запроса, который я хочу построить:
Код

EXEC sp_executeSQL N'Select Марка_Автомобиля 
from Автомобили
Where Номер_Двигателя = @Number', 
N'@Number INT', 
@Number = 7;

тут динамически задаём номер двигателя. А мне нужно динамически задать необходимые столбцы и название таблицы в таком же формате как запрос выше.


kobra, а если для меня принципиально задавать параметры при вызове)) а не где-то в другом месте.

Автор: kobra 17.11.2009, 14:13
Цитата(Hohhi @  17.11.2009,  12:52 Найти цитируемый пост)
kobra, а если для меня принципиально задавать параметры при вызове)) а не где-то в другом месте. 

т.е. чтобы динамически составить запрос, а потом при вызове передать параметры? 
а смысл?
во время составления запроса можно и условия тудаже вписять а потом запустить.
можно иначе: 
динамически создать процедуру или функцию, запустить с нужними параметрами и дропнуть. но зачем такие извращения?

Автор: Hohhi 17.11.2009, 14:31
kobra, это университетское задание, не знаю зачем такие извращения

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)