Форум: "Базы";
Текущий архив: 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