Можно ли передать в хранимую процедуру имя колонки?

Running Man
Дата: 16.01.2001 10:25:10
Только ногами не пинайте.
Staple
Дата: 16.01.2001 10:37:11
А че ж нельзя? Можно!

Create Procedure myProc
@colname nvarchar(20),
@val nvarchar(10)
AS
Declare @qry nvarchar(256)
Set @qry = 'Select * From myTable Where ' + @colname + ' = ' + @val
Exec(@qry)

Вот так, к примеру...
AnKa
Дата: 17.01.2001 10:08:15
Это неплохо, если запросик маленький, а если он строчек эдак на 15-20? Формировать такую строку не очень красиво. Жаль, что в MS SQL нет такого понятия, как макроподстановка. А неплохо было бы иметь возможность написать что-то вроде

SELECT *
FROM @Table1

или

SELECT t.@Col1, t.@Col2
FROM Table1

маразм конечно, но идея понятна.
VadimB
Дата: 17.01.2001 15:26:20
Все колонки можно пронумеровать и в процедуру передавать номер колонки, а не имя.
В процедуре в зависимости от номера выполняется соответствующий код.

Если Вы скажете, что код для разных колонок одинаковый, то
это означает что один алгоритм может обрабатывать разные колонки или таблицы.
Если разные колонки или разные таблицы обрабатываются одинаково, то
эти колонки или таблицы следует объединить в одну и нет проблем с параметром в виде имени колонки.
merlin
Дата: 18.01.2001 10:22:40
В даннм случае может помочь case в запросах
declare col_id int
..
select col_id = 3 -- например

В процедуре
сreate proc proc1 (... col_id int ...)
as
...
select case col_id
when 1 then [column1]
when 2 then [column2]
when 3 then [column3]
...
end
from [table]
...