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

Откуда: Тольятти
Сообщений: 117
Здравствуйте.
У меня есть две таблицы. В table0 есть одна запись, в table1 несколько. Мне нужно написать процедуру, в которой значение определенного столбца table0 и значение динамически задающегося столбца table1 перемножались. Сначала написал следующую процедуру:
	@par varchar, /*параметр выбора строки из table1*/
	@col varchar /*динамически задаваемый столбец*/
AS
	SELECT table0.staticColomn * @col AS Val FROM table0 CROSS JOIN table1 WHERE (table1.par = @par)

Но затем понял, что выражение table0.staticColomn * @col воспринимается как [значения столбца]*[варчар @col], вместо [значения столбца]*[значения столбца, имя которого задано варчаром @col]

После этого задался поиском мануалов... При подобных проблемах советовали ссылку на фак - https://www.sql.ru/faq/faq_topic.aspx?fid=104 Пробовал написать по нему что-то нормальное, но рабочей процедуры так и не вашло. Вот "из последнего":
	@par varchar, 
	@col varchar,
	@SQL varchar,
	@SQL = 'SELECT table0.staticColomn *' + @col + 'AS Val FROM table0 CROSS JOIN table1 WHERE (table1.par = ' + @par + ')'
AS
	exec(@SQL)
Очень надеюсь на помощь экспертов
25 авг 09, 10:01    [7575718]     Ответить | Цитировать Сообщить модератору
 Re: Указание столбца, как переменной в SELECT  [new]
Glory
Member

Откуда:
Сообщений: 104760
declare @par varchar == declare @par varchar(1)
25 авг 09, 10:05    [7575739]     Ответить | Цитировать Сообщить модератору
 Re: Указание столбца, как переменной в SELECT  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Имхо не надо тут динамика вообще
SELECT table0.staticColomn 
       * case when @column_name = 'field1' then table0.field1
              when @column_name = 'field2' then table0.field2
              else ...
       end
  from ...
25 авг 09, 10:05    [7575742]     Ответить | Цитировать Сообщить модератору
 Re: Указание столбца, как переменной в SELECT  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
или так:

use tempdb
go

create procedure test
(
@par varchar(10), 
@col varchar(50)
)
as
	declare @SQL varchar(100)
	set @SQL = 'SELECT '+@col + ' AS Val FROM sysobjects WHERE id=' + @par 
	exec(@SQL)
go

execute test '4', 'name'
go

drop proc test
go
25 авг 09, 10:09    [7575760]     Ответить | Цитировать Сообщить модератору
 Re: Указание столбца, как переменной в SELECT  [new]
Денис Г.
Member

Откуда: Тольятти
Сообщений: 117
Большое спасибо за ответы. Воспользовался кодом Алексея Князева. Окончательный вид следующий:
@par varchar(15), 
@col varchar(20)

AS
	declare @SQL varchar(100)
	set @SQL = 'SELECT table0.staticColomn *'+@col + ' AS Val FROM table0 CROSS JOIN table1 WHERE table1.par ='+ Char(39) + @par +Char(39)
	exec(@SQL)
25 авг 09, 10:45    [7575990]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить