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

Откуда: Питер
Сообщений: 55
Всем привет,

Есть формочка на C#. Она генерит запрос MainSelect.
Если нажать на кнопку submit, она запускает запрос MainSelect (например, Select * from T).
Если нажать на кнопку count, она запускает запрос формата Select count(*) from (MainSelect).

В Оракле работало хорошо, в MsSql такой синтаксис не работает.
Проблема в том что строчка кода зашита в базовом классе в другой сборке(dll), и эту строку (ниже) так просто не изменить,
даже используя рефлекш :)
this.cntSql = string.Format("select count(*) from ({0})", sql);

Вопрос
Можно тут что-то сделать, что бы не меняя внутренности MainSelect
и формат запроса - все заработало?

То есть сделать фичу, чтобы
- фича от(MainSelect) была корректным запросом для MsSql
- Select count(*) from (фича от (MainSelect)) возвращала count

Есть идеи, плиз?

ЗЫ Не уверен, что понятно вопрос объяснил :)
22 мар 12, 12:54    [12294362]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Изучите синтаксис и сформируйте правильный текст запроса.

З.Ы. Для MSSQL надо прописать алиас:
select count(*) from (...) as a
22 мар 12, 12:57    [12294387]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Гавриленко Сергей Алексеевич,

К сожалению, не могу поменять формат запроса,
по вышеперечисленным причинам.
22 мар 12, 13:18    [12294607]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Shrek2
Гавриленко Сергей Алексеевич,

К сожалению, не могу поменять формат запроса,
по вышеперечисленным причинам.


или запрос меняйте. или сервер...

дизассемблируйте ту длл, исправьте и соберите вновь
22 мар 12, 13:20    [12294618]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
безжалостный приговор :)
сервер как раз меняется на MsSQl целенаправлено
вариант с заменой длл рассматривается, но не очень желателен.

Может еще идеи?...
22 мар 12, 13:30    [12294704]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Shrek2
безжалостный приговор :)
сервер как раз меняется на MsSQl целенаправлено
вариант с заменой длл рассматривается, но не очень желателен.

Может еще идеи?...


есть см. выше.

ЗЫ. а завтра вы нарветесь еще на десяток запросов, у которых синтаксис отличается, что будете делать?
Чем-то надо жертвовать, третьего варианта нету.
22 мар 12, 13:51    [12294931]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Shrek2
безжалостный приговор :)
сервер как раз меняется на MsSQl целенаправлено
вариант с заменой длл рассматривается, но не очень желателен.

Может еще идеи?...
Как можно поменять СУБД для программы, к которой нет исходников???

Это возможно сделать только разработчикам.

Ну или хакнуть, как тут предложили, но что то не верится в успешность мероприятия - наверняка будут другие препятствия.
22 мар 12, 14:42    [12295561]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Большое спасибо за ответы,
идей у нас самих много :)
вопрос был в том, можно ли обойтись малой кровью, написав хитроумный Т-SQL
Напишу чем дело кончилось.
22 мар 12, 14:53    [12295678]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Shrek2
Большое спасибо за ответы,
идей у нас самих много :)
вопрос был в том, можно ли обойтись малой кровью, написав хитроумный Т-SQL
Напишу чем дело кончилось.


где вы хотите его написать???? вы же сказали, что запрос изменить нельзя

где бы вы написали его в Оракле?
22 мар 12, 15:16    [12295863]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Shrek2
вопрос был в том, можно ли обойтись малой кровью, написав хитроумный Т-SQL
Нельзя, запросы писать запрещено.

Или вы что то недоговариваете.
22 мар 12, 17:27    [12297110]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Может и правда недоговорил, извиняюсь тогда...

Я могу генерить выражение MainSelect
22 мар 12, 17:53    [12297434]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Именно MainSelect должен быть хитроумный :)
22 мар 12, 17:57    [12297468]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Konst_One
Member

Откуда:
Сообщений: 11625
Dim MainSelect  as String
Dim sql as String

MainSelect = "SELECT * FROM [Table1]) a where (1=1"
sql = "Select count(*) from (" & MainSelect & ")"

set rs = db.execute(sql)


вуаля
22 мар 12, 17:58    [12297482]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Konst_One
Dim MainSelect  as String
Dim sql as String

MainSelect = "SELECT * FROM [Table1]) a where (1=1"
sql = "Select count(*) from (" & MainSelect & ")"

set rs = db.execute(sql)


вуаля


шайтан

зы. при условии, что девелОперы оставили красивую возможность делать инъекции в запросы
22 мар 12, 20:17    [12298097]     Ответить | Цитировать Сообщить модератору
 Re: select count(*) from (select)  [new]
может не пройти
Guest
Konst_One
Dim MainSelect  as String
Dim sql as String

MainSelect = "SELECT * FROM [Table1]) a where (1=1"
sql = "Select count(*) from (" & MainSelect & ")"

set rs = db.execute(sql)


вуаля

есть подозрение что MainSelect должен работать как отдельно так и в обертке

Shrek2
Если нажать на кнопку submit, она запускает запрос MainSelect (например, Select * from T).
Если нажать на кнопку count, она запускает запрос формата Select count(*) from (MainSelect).
22 мар 12, 20:27    [12298135]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить