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

Откуда:
Сообщений: 21
Имеется sql server 2005 и 1c 7.7,соответственно база стоит в режиме совместимости с sql server 2000. Надо выполнить перекрестный запрос. В sql 2005 для этого есть такая процедура как pivot,но она не воспринимается,т.к. в sql 2000 ее нет. Можно попробовать обойти это путем изменения совместимости в момент выполнения запроса, а потом вернуть обратно.
sp_dbcmptlevel Mtest, 90
 ............
go
sp_dbcmptlevel Mtest, 80
go
Но тогда возникает вопрос,что может случиться с 1С,если она в это время тоже попытается обратиться к базе? Разворот таблицы организовал,но этот метод не универсальный (постоянно добавляются дополнительные колонки, а их кол-во с запросом упирается в 8к символов) и работает он в 2.5 раза медленнее.Может кто сталкивался с подобной проблемой и знает как ее решить или какие костыли подставить?
17 сен 09, 19:11    [7675786]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
set ansi_warnings off
declare @t table(item int, val_type int, val int)
insert into @t(item, val_type, val)
select 1, 100, 111 union all
select 1, 200, 222 union all
select 2, 100, 102 union all
select 3, 200, 203

select item, [100], [200]
  from @t
 pivot (max(val) for val_type in ([100], [200])) p

select item
      ,max(case when val_type = 100 then val end) as [100]
      ,max(case when val_type = 200 then val end) as [200]
  from @t
 group by item
set ansi_warnings on
Как видите, существуют случаи, когда без pivot можно обойтись
Может, Ваш случай такой же?
17 сен 09, 19:26    [7675834]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
Разве что попробовать рядом базу с процедурой, в которой будет pivot, сделать. Но не факт, что так тупо в лоб выйдет.
17 сен 09, 19:27    [7675835]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3197
Можно переключить контекст базы на master, а в запросе имена всех объектов писать с указанием БД, dbname.schemaname.objectname - работает.
17 сен 09, 19:40    [7675860]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
CMeP4
Member

Откуда:
Сообщений: 21
Паганель,
Как перевернуть столбцы без pivot я знаю,но ,к примереру, вы написали пример для переворота 3-ех столбцов,у меня таких 25 и постоянно прибавляются,а что б руцями это все не писать и не редактировать код после каждого добавления нового столбца - нужно запрос формировать циклом и загонять в строку,длинна которой 8000. В моем случае- это плохой и недалеко идущий подход


Гавриленко Сергей Алексеевич,
Плодить базы - это тоже не выход,тем болие,что база большая,а информация нужна всегда актуальная. Нагружать и без того загруженый сервак еще и дубликатом баз никто не даст, да и неправильно это.

Ennor Tiegael
А с этого места поподробнее или как правильно загуглить,т.к. сам сервер не настраивал и не особо еще разобрался
18 сен 09, 18:01    [7681008]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
CMeP4
вы написали пример для переворота 3-ех столбцов,у меня таких 25 и постоянно прибавляются
не добавляйте столбцы по одному
добавьте их всех сразу
18 сен 09, 18:10    [7681049]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
CMeP4
Паганель,
Как перевернуть столбцы без pivot я знаю,но ,к примереру, вы написали пример для переворота 3-ех столбцов,у меня таких 25 и постоянно прибавляются,а что б руцями это все не писать и не редактировать код после каждого добавления нового столбца - нужно запрос формировать циклом и загонять в строку,длинна которой 8000. В моем случае- это плохой и недалеко идущий подход
и чем же поможет присловутый тупой PIVOT?
CMeP4
Гавриленко Сергей Алексеевич,
Плодить базы - это тоже не выход,тем болие,что база большая,а информация нужна всегда актуальная. Нагружать и без того загруженый сервак еще и дубликатом баз никто не даст, да и неправильно это.
Зачем плодить? Речь, как я понял, идёт об одной базе с уровнем совместимости 90. Процедуры из этой базы можно, например, вызывать из баз с уровнем 80, а внутри них - полное раздолье, доступны все примочки 2005-го сервера.
Но стоит всё проверить.
18 сен 09, 18:21    [7681092]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
CMeP4
Member

Откуда:
Сообщений: 21
iap,
База стоит с уровнем 80,т.к. с уровнем 90 1С 7.7 отказывается работать. Вот и возник вопрос,как использовать примочки 2005-ого?
18 сен 09, 18:48    [7681190]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
iap
CMeP4
нужно запрос формировать циклом и загонять в строку,длинна которой 8000.
и чем же поможет присловутый тупой PIVOT?
как это говорит нонешняя молодежь ... меньше букаф
18 сен 09, 18:54    [7681213]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
CMeP4
iap,
База стоит с уровнем 80,т.к. с уровнем 90 1С 7.7 отказывается работать. Вот и возник вопрос,как использовать примочки 2005-ого?
Вот я и намекаю, что можно вызывать процедуру, хранящуюся в БД с уровнем 90, работая в контексте БД с уровнем 80.
18 сен 09, 19:34    [7681328]     Ответить | Цитировать Сообщить модератору
 Re: pivot в режиме совместимости с sql 2000  [new]
CMeP4
Member

Откуда:
Сообщений: 21
Ennor Tiegael,
Спасибо,помогло.

Спасибо всем за советы.
23 сен 09, 11:23    [7696583]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить