Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Запросы   Найти похожие ветки 

 
Koba   (2004-04-15 21:21) [0]

Пожскажите как узнать результат запроса(присвоить его переменной):
select count(*) from XXX


 
Koba   (2004-04-15 21:21) [0]

Пожскажите как узнать результат запроса(присвоить его переменной):
select count(*) from XXX


 
kaif ©   (2004-04-15 21:26) [1]

Зависит от того, как делается сам запрос. Если с помощью компонентов типа TQuery, то нужно запрос открыть (метод Open),  а затем считать значение поля методом
Query1.Fields[0].AsInteger.
А можно сделать псевдоним для поля в запросе:
select count(*) ccc from XXX
И обратиться по имени:
Query1.FieldByName("ccc").AsInteger


 
kaif ©   (2004-04-15 21:26) [1]

Зависит от того, как делается сам запрос. Если с помощью компонентов типа TQuery, то нужно запрос открыть (метод Open),  а затем считать значение поля методом
Query1.Fields[0].AsInteger.
А можно сделать псевдоним для поля в запросе:
select count(*) ccc from XXX
И обратиться по имени:
Query1.FieldByName("ccc").AsInteger


 
tERRORist ©   (2004-04-15 21:26) [2]

declare @len int
set @len=(select count(*) from xxx)

а вот меня интересует как найти максимальную длину значения (если значение представить как строку) в поле, когда название самого поля и таблицы заранее не известно.


 
tERRORist ©   (2004-04-15 21:26) [2]

declare @len int
set @len=(select count(*) from xxx)

а вот меня интересует как найти максимальную длину значения (если значение представить как строку) в поле, когда название самого поля и таблицы заранее не известно.


 
kaif ©   (2004-04-15 21:29) [3]

2 tERRORist ©   (15.04.04 21:26) [2]
Это код для MSSQL ?
Тогда, ИМХО, ответом на твой вопрос будет запрос этих данных из системных таблиц MSSQL. Где описываются метаданные таблиц?


 
kaif ©   (2004-04-15 21:29) [3]

2 tERRORist ©   (15.04.04 21:26) [2]
Это код для MSSQL ?
Тогда, ИМХО, ответом на твой вопрос будет запрос этих данных из системных таблиц MSSQL. Где описываются метаданные таблиц?


 
tERRORist ©   (2004-04-15 21:33) [4]

НЕ не совсем меня правильно понял. Максимально допустимую длину (т.е. которую задаешь при проектировании таблицы можно легко вытащить из метаданных), а мне нужно узнать какова реальная максимальная длина поля (длину самого длинного значения :).
Причем еще косяк в том, что название столбца и таблицы заранее не известно, а получаются из текстовых параметров...


 
tERRORist ©   (2004-04-15 21:33) [4]

НЕ не совсем меня правильно понял. Максимально допустимую длину (т.е. которую задаешь при проектировании таблицы можно легко вытащить из метаданных), а мне нужно узнать какова реальная максимальная длина поля (длину самого длинного значения :).
Причем еще косяк в том, что название столбца и таблицы заранее не известно, а получаются из текстовых параметров...


 
kaif ©   (2004-04-15 21:39) [5]

А что максимально задаваемая не равна реально максимальной?
Например, мне всегда казалось, что VARCHAR(50) это поле, в которое реально можно запихать строку, длиной именно максимум в  50 символов. Или это в MSSQL не так?


 
kaif ©   (2004-04-15 21:39) [5]

А что максимально задаваемая не равна реально максимальной?
Например, мне всегда казалось, что VARCHAR(50) это поле, в которое реально можно запихать строку, длиной именно максимум в  50 символов. Или это в MSSQL не так?


 
tERRORist ©   (2004-04-15 21:41) [6]

Если названия столбца и таблицы знать заранее, то найти легко:

set @len=(select max(len(cast(COLUMN1 as varchar(8000)))) from TABLE1)

Но дело в том что COLUMN1, TABLE1 нужно подставлять динамически.
Попробовал сделать функцию, в которой выполняю динамические запросы exec("<command>") и записываю результат во временную табличку, но при присвоении переменной @len=(select column_length from #temporary_table) сервер зараза ругается, говорит что нельзя обращаться из функций к временных таблицам :(


 
tERRORist ©   (2004-04-15 21:41) [6]

Если названия столбца и таблицы знать заранее, то найти легко:

set @len=(select max(len(cast(COLUMN1 as varchar(8000)))) from TABLE1)

Но дело в том что COLUMN1, TABLE1 нужно подставлять динамически.
Попробовал сделать функцию, в которой выполняю динамические запросы exec("<command>") и записываю результат во временную табличку, но при присвоении переменной @len=(select column_length from #temporary_table) сервер зараза ругается, говорит что нельзя обращаться из функций к временных таблицам :(


 
kaif ©   (2004-04-15 21:42) [7]

Может тебе нужно
select max(length(<поле>)) from <таблица>
?
Тогда нужно откопать функцию length в MSSQL. Там много функций. Такая явно тоже найдется. И не одна.


 
kaif ©   (2004-04-15 21:42) [7]

Может тебе нужно
select max(length(<поле>)) from <таблица>
?
Тогда нужно откопать функцию length в MSSQL. Там много функций. Такая явно тоже найдется. И не одна.


 
kaif ©   (2004-04-15 21:47) [8]

Я понял наконец. А в конце-то концов что нужно получить на стороне клиента? Одно значение для данного поля данной таблицы? Или целый массив таких значений?


 
kaif ©   (2004-04-15 21:47) [8]

Я понял наконец. А в конце-то концов что нужно получить на стороне клиента? Одно значение для данного поля данной таблицы? Или целый массив таких значений?


 
kaif ©   (2004-04-15 21:48) [9]

Из хранимых процедур же можно обращаться к временным таблицам. Напиши хранимую процедуру.


 
kaif ©   (2004-04-15 21:48) [9]

Из хранимых процедур же можно обращаться к временным таблицам. Напиши хранимую процедуру.


 
tERRORist ©   (2004-04-15 21:51) [10]

Нужно что-то вроде этого:

set @command=" if not exists( select * from  tempdb..sysobjects where name="##temp_table") "+
 " create table ##temp_table (column_length int);"
exec(@command)

set @command=" insert into ##temp_table (column_length)"+
 " select max(len(cast("+@column+" as varchar(8000)))),  " from "+@table+";"
exec(@command)
set @len=(select column_length from ##temp_table)


где @table и @column -динамически подставляемые имена


 
tERRORist ©   (2004-04-15 21:51) [10]

Нужно что-то вроде этого:

set @command=" if not exists( select * from  tempdb..sysobjects where name="##temp_table") "+
 " create table ##temp_table (column_length int);"
exec(@command)

set @command=" insert into ##temp_table (column_length)"+
 " select max(len(cast("+@column+" as varchar(8000)))),  " from "+@table+";"
exec(@command)
set @len=(select column_length from ##temp_table)


где @table и @column -динамически подставляемые имена


 
kaif ©   (2004-04-15 21:56) [11]

Объяви курсор и в нем сделай это присвоение.


 
kaif ©   (2004-04-15 21:56) [11]

Объяви курсор и в нем сделай это присвоение.


 
tERRORist ©   (2004-04-15 21:56) [12]

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


 
tERRORist ©   (2004-04-15 21:56) [12]

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


 
kaif ©   (2004-04-15 22:02) [13]

Да, я понял, что ты хочешь сделать. Только я вот чего не понял. Почему внутри функции ты можешь задействовать запрос SELECT, но не можешь у него "похитить" результат? Ты пробовал объявлять курсор? Курсор по динамическом SQL сработает? Он же всего один раз должен будет "щелкнуть" - присвоить результат переменной, которую вернет функция.


 
kaif ©   (2004-04-15 22:02) [13]

Да, я понял, что ты хочешь сделать. Только я вот чего не понял. Почему внутри функции ты можешь задействовать запрос SELECT, но не можешь у него "похитить" результат? Ты пробовал объявлять курсор? Курсор по динамическом SQL сработает? Он же всего один раз должен будет "щелкнуть" - присвоить результат переменной, которую вернет функция.


 
tERRORist ©   (2004-04-15 22:08) [14]

Че-то я вопрса не понял...
Селект-то я могу сделать, но ведь заранее не известно на что -
имена столбца и таблицы переменные. А вытащить данные из exec(@command) никак не получится, сервер ведь открывает отдельною соединение, и там выполнияет код который идет в параметре @command


 
tERRORist ©   (2004-04-15 22:08) [14]

Че-то я вопрса не понял...
Селект-то я могу сделать, но ведь заранее не известно на что -
имена столбца и таблицы переменные. А вытащить данные из exec(@command) никак не получится, сервер ведь открывает отдельною соединение, и там выполнияет код который идет в параметре @command


 
Hro   (2004-04-15 22:20) [15]

>> tERRORist
Стоп, только без курсоров пожалуйста, они медленно работают.
Меня kaif попросил помоч.
сформулируй пожалуйста еще раз свою задачу


 
Hro   (2004-04-15 22:20) [15]

>> tERRORist
Стоп, только без курсоров пожалуйста, они медленно работают.
Меня kaif попросил помоч.
сформулируй пожалуйста еще раз свою задачу


 
Hro   (2004-04-15 22:23) [16]

>> tERRORist
для одного поля
select maxlen=max(L) from (select L=len(field1) from table1) as tt


 
Hro   (2004-04-15 22:23) [16]

>> tERRORist
для одного поля
select maxlen=max(L) from (select L=len(field1) from table1) as tt


 
tERRORist ©   (2004-04-15 22:34) [17]

>Стоп, только без курсоров пожалуйста, они медленно работают.
Курсоры работают нормально, я на них как раз все и строю, чтоб получать группировки.

>Меня kaif попросил помоч.
>сформулируй пожалуйста еще раз свою задачу

Задача офигенная, надо сделать универсальный отчет, чтоб в процедуру передавались имя таблицы и список группируемых столбцов, а она выдавала результат в красивом сгруппированном виде. Вобщем уже все сделал реально, на клиенте в DBGridEh все выводится, раскрашивается по уровням группировки, сделал даже свертывание, развертывание уровней на ЦеллКлик, суммирование - т.е как Пивот Тэйбл в Екселе. Осталось немного подправить такую штуку. Если хочется сгруппировать на одном уровне несколько столбцов, то у меня формируется строка (которая вставляется в результат как заголовок уровня) "Название столбца1: Сгруппированное значние1 "+ "Название столбца2: Сгруппированное значение2". Но значения <Сгруппированное значение> могут иметь разную длину, т.е. в другом заголовке того же уровня они не будут строго друг под другом, вот я и хотел находить максимальную длину и по ней форматировать. Вобщем это наверно сложно для понимания, если б посмотреть скриншот сразу станет ясно... Жаль картинки нельзя вставлять


 
tERRORist ©   (2004-04-15 22:34) [17]

>Стоп, только без курсоров пожалуйста, они медленно работают.
Курсоры работают нормально, я на них как раз все и строю, чтоб получать группировки.

>Меня kaif попросил помоч.
>сформулируй пожалуйста еще раз свою задачу

Задача офигенная, надо сделать универсальный отчет, чтоб в процедуру передавались имя таблицы и список группируемых столбцов, а она выдавала результат в красивом сгруппированном виде. Вобщем уже все сделал реально, на клиенте в DBGridEh все выводится, раскрашивается по уровням группировки, сделал даже свертывание, развертывание уровней на ЦеллКлик, суммирование - т.е как Пивот Тэйбл в Екселе. Осталось немного подправить такую штуку. Если хочется сгруппировать на одном уровне несколько столбцов, то у меня формируется строка (которая вставляется в результат как заголовок уровня) "Название столбца1: Сгруппированное значние1 "+ "Название столбца2: Сгруппированное значение2". Но значения <Сгруппированное значение> могут иметь разную длину, т.е. в другом заголовке того же уровня они не будут строго друг под другом, вот я и хотел находить максимальную длину и по ней форматировать. Вобщем это наверно сложно для понимания, если б посмотреть скриншот сразу станет ясно... Жаль картинки нельзя вставлять


 
kaif ©   (2004-04-16 01:55) [18]

Может залезть в дебри DBGridEh, я так понял, что вся информация уже на клиенте?


 
kaif ©   (2004-04-16 01:55) [18]

Может залезть в дебри DBGridEh, я так понял, что вся информация уже на клиенте?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.03 c
4-1079945854
Erik
2004-03-22 11:57
2004.05.09
Открытие родительского процеса.


3-1081863694
__Andy__
2004-04-13 17:41
2004.05.09
Расскраска строк в DBGridEh


4-1079640613
twink
2004-03-18 23:10
2004.05.09
MouseClick


9-1069692267
Barlok
2003-11-24 19:44
2004.05.09
Вопрос по выделению объекта в OpenGL в Delphi


3-1081939231
31512
2004-04-14 14:40
2004.05.09
TClientDataSet.ApplyUpdates(0) &amp; TClientDataSet.Refresh





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский