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

Вниз

как выбрать значение из набора записей возвращаемых процедурой   Найти похожие ветки 

 
logslava   (2006-07-14 12:12) [0]

в SQL SERVERе есть sp_databases, которая возвращает список баз данных и их размеры

как в запросе выбрать из этого набора нужную строку (допустим нужно узнать размер конкретной БД)?


 
Desdechado ©   (2006-07-14 12:14) [1]

На сервере узнать/выбрать или в дельфи?


 
logslava   (2006-07-14 12:16) [2]

запрос на сервере (зачем гонят по сети список всех БД)


 
Desdechado ©   (2006-07-14 12:25) [3]

WHERE name="нужная бд"
?


 
logslava   (2006-07-14 12:27) [4]

да это-то ясно. как написать?

select *
from <?>       -- здесь надо как-то представить результат sp_databases
where ...


 
sniknik ©   (2006-07-14 12:46) [5]

> допустим нужно узнать размер конкретной БД
select "КонкретнаяBD" as bd, sum(size)*8 as Size from КонкретнаяBD.dbo.sysfiles


 
sniknik ©   (2006-07-14 12:50) [6]

> ... здесь надо как-то представить результат sp_databases
так не получится, результат процедуры можно только в insert into передать, во временную таблицу к примеру, после из нее выборку сделать, ну или через внешнее чтото (openrowset например)  что возвращает рекордсет, но это будет тяжеловесное решение... легче уж весь список передать и нужное на клиенте выбрать.


 
logslava   (2006-07-14 13:10) [7]

sniknik ©   (14.07.06 12:46) [5]

- спасибо, с этим разобрался, только правильнее будет так:
select name from [ТРЕБУЕМАЯ БД].dbo.sysfiles

sniknik ©   (14.07.06 12:50) [6]

- как с помощью insert"a?

declare @T table (...)
insert into @T
sp_databases           -- это не правильно - ??


 
sniknik ©   (2006-07-14 14:03) [8]

> -- это не правильно - ??
неправильно. в переменную табличного типа нельзя... (вроде бы. уточнить бы), придется именно создавать временную (т.е. надо #t/##t а не @t)


 
logslava   (2006-07-14 14:24) [9]

а можно узнать размеры таблиц базы данных?


 
sniknik ©   (2006-07-14 14:45) [10]

вряд ли... я по крайней мере такого способа не знаю.


 
Stanislav ©   (2006-07-14 15:36) [11]

logslava   (14.07.06 14:24) [9]

CREATE PROCEDURE GETSIZETABLES AS
DECLARE @pagesizeKB int
SELECT @pagesizeKB = low / 1024 FROM master.dbo.spt_values
WHERE number = 1 AND type = "E"

SELECT
 table_name = OBJECT_NAME(o.id),
 rows = i1.rowcnt,
 reservedKB = (ISNULL(SUM(i1.reserved), 0) + ISNULL(SUM(i2.reserved), 0)) * @pagesizeKB,
 dataKB = (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0)) * @pagesizeKB,
 index_sizeKB = ((ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 0))
   - (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0))) * @pagesizeKB,
 unusedKB = ((ISNULL(SUM(i1.reserved), 0) + ISNULL(SUM(i2.reserved), 0))
   - (ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 0))) * @pagesizeKB
FROM sysobjects o
LEFT OUTER JOIN sysindexes i1 ON i1.id = o.id AND i1.indid < 2
LEFT OUTER JOIN sysindexes i2 ON i2.id = o.id AND i2.indid = 255
WHERE OBJECTPROPERTY(o.id, N"IsUserTable") = 1 --same as: o.xtype = %af_src_str_2
OR (OBJECTPROPERTY(o.id, N"IsView") = 1 AND OBJECTPROPERTY(o.id, N"IsIndexed") = 1)
GROUP BY o.id, i1.rowcnt
ORDER BY 3 DESC


 
sniknik ©   (2006-07-14 15:58) [12]

Stanislav ©   (14.07.06 15:36) [11]
это грубо говоря подсчет страниц на которых располагается таблица, а не размер таблиц.
и таблица в одну строку, и в 100 будет показано одного размера (если не слишком большае запись, в 8кб влазит сумма), а если таблица усиленно используется "размазана" по неполным страницам, то есть вероятность что меньшего размера займет больше страниц... т.е. даже эту "округленную до 8кб" инфу нужно получать только после упаковки (shrink) базы.


 
Stanislav ©   (2006-07-14 16:05) [13]

sniknik ©   (14.07.06 15:58) [12]
Т.е. выводит занимаемое место таблицей на диске.



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

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

Наверх





Память: 0.47 MB
Время: 0.041 c
1-1154467629
Германн
2006-08-02 01:27
2006.09.17
Недоумение в вопросе использования оператора CASE


15-1155935385
Ketmar
2006-08-19 01:09
2006.09.17
господа киевляне, сколь кейчас стоит снимать квартиру?


6-1145525827
Dadd
2006-04-20 13:37
2006.09.17
Как Убрать alert() из JavaScript в TwebBrowser и фреймах ?


6-1146644798
Chaser
2006-05-03 12:26
2006.09.17
Зависание при "IdTCPClient.ReadInteger(true)"


2-1156355783
serko
2006-08-23 21:56
2006.09.17
ADO





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский