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

Откуда:
Сообщений: 9
Хотелось бы что-то вроде:

select * from tablename as tbl where 
1 = case when exists (select column_name from information_schema.columns
		where table_name = 'isfolder') then 0 else tbl.isfolder end

Проблема в tbl.isfolder, на который при его отсутствии естесенно ругается: Invalid column name 'isfolder'
21 окт 09, 00:08    [7814725]     Ответить | Цитировать Сообщить модератору
 Re: Создать динамическое условие, столбец не всегда присутствует  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
Динамический запрос спасет отца русской демократии.
21 окт 09, 00:09    [7814734]     Ответить | Цитировать Сообщить модератору
 Re: Создать динамическое условие, столбец не всегда присутствует  [new]
Арта
Member

Откуда:
Сообщений: 9
Имеется ввиду через exec или процедуру? или и так и так получится? :)
21 окт 09, 00:17    [7814769]     Ответить | Цитировать Сообщить модератору
 Re: Создать динамическое условие, столбец не всегда присутствует  [new]
iljy
Member

Откуда:
Сообщений: 8711
Арта,

динамический запрос - это либо запрос через exec, либо через sp_executesql. Процедура формируется статически. Если конечно не извращаться с созданием процедуры динамическим запросом;))
21 окт 09, 01:09    [7814912]     Ответить | Цитировать Сообщить модератору
 Re: Создать динамическое условие, столбец не всегда присутствует  [new]
Арта
Member

Откуда:
Сообщений: 9
Оки, уже пробую!
21 окт 09, 02:05    [7814973]     Ответить | Цитировать Сообщить модератору
 Re: Создать динамическое условие, столбец не всегда присутствует  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Автор, скажите, пожалуйста, если не секрет, а откуда вообще такая проблема родилась?
Я как-то привык, что поле в таблице или есть, или его нет

Но так, чтобы оно то есть, то его нет, то опять есть.... такого я что-то в своей жизни не встречал...
21 окт 09, 10:22    [7815620]     Ответить | Цитировать Сообщить модератору
 Re: Создать динамическое условие, столбец не всегда присутствует  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Паганель
Автор, скажите, пожалуйста, если не секрет, а откуда вообще такая проблема родилась?
Я как-то привык, что поле в таблице или есть, или его нет

Но так, чтобы оно то есть, то его нет, то опять есть.... такого я что-то в своей жизни не встречал...


представление или таблица генерируемая "ядром" приложения.
21 окт 09, 10:25    [7815643]     Ответить | Цитировать Сообщить модератору
 Re: Создать динамическое условие, столбец не всегда присутствует  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Ken@t
таблица генерируемая "ядром" приложения.
-- наша подготовка
create table tablename(id int, isfolder bit)
go
create view view1 as select id, isfolder from tablename
go
create view view2 as select id from tablename
go
create procedure proc1 as
begin
   if exists (select * 
                from INFORMATION_SCHEMA.COLUMNS
               where TABLE_NAME  = 'tablename'
                 and COLUMN_NAME = 'isfolder')
      select * from view1 where isfolder = 1
   else 
      select * from view2
end
go
drop table tablename
go

-- работа приложения 1
create table tablename(id int, isfolder bit)
insert into tablename(id, isfolder)
select 10, 1 union all
select 20, 0
   -- работа нашей процедуры
   exec proc1
-- работа приложения 1
drop table tablename
go

-- работа приложения 2
create table tablename(id int)
insert into tablename(id)
select 10 union all
select 20
   -- работа нашей процедуры
   exec proc1
-- работа приложения 2
drop table tablename
go

-- зачистка того, что осталось после `нашей подготовки`
drop procedure proc1
drop view view1
drop view view2
go

id          isfolder
----------- --------
10          1

(1 row(s) affected)

id
-----------
10
20

(2 row(s) affected)
21 окт 09, 10:49    [7815834]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить