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

Откуда: Волгоград
Сообщений: 273
Нашел на просторах инета вот такой код, подскажите как выполнить его для всех баз

SELECT
a.file_id,
LOGICAL_NAME = a.name,
PHYSICAL_FILENAME = a.physical_name,
FILEGROUP_NAME = b.name,
FILE_SIZE_MB = CONVERT(DECIMAL(12,2),ROUND(a.size/128.000,2)),
SPACE_USED_MB = CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)),
FREE_SPACE_MB = CONVERT(DECIMAL(12,2),ROUND((a.size-FILEPROPERTY(a.name,'SpaceUsed'))/128.000,2))
FROM sys.database_files a LEFT OUTER JOIN sys.data_spaces b
ON a.data_space_id = b.data_space_id


пытался сначала вставить вот в такой курсор
declare @rn int;
declare @db_name sysname;


DECLARE db_cursor_chet CURSOR FOR
select rn, Name 
from (SELECT row_number() over (order by Name) as rn, Name
      FROM sys.databases)t
OPEN db_cursor_chet;

FETCH NEXT FROM db_cursor_chet 
INTO @rn, @db_name;

WHILE @@FETCH_STATUS = 0
BEGIN
	--сюда
FETCH NEXT FROM db_cursor_chet 
INTO @rn, @db_name;
END
CLOSE db_cursor_chet;
DEALLOCATE db_cursor_chet;


но оказывается запрос работает в контексте БД, а попытка вставить use @db_name приводит к ошибке

потом попытался через EXEC sp_MSforeachdb
но в коде запроса есть
FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)

и он ругается на кавычки внутри кавычек

Научите пожалуйста как правильно сделать

ЗЫ я новичек в SQL
24 сен 12, 11:55    [13211811]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
qwertEHOK,

и как выглядит ваш вариант кода с sp_MSforeachdb ?
24 сен 12, 12:01    [13211861]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
qwertEHOK
Научите пожалуйста как правильно сделать
Удвоить кавычки
24 сен 12, 12:03    [13211880]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
qwertEHOK
Member

Откуда: Волгоград
Сообщений: 273
 INSERT INTO #ttmp
 EXEC sp_MSforeachdb '
 Select a.FILEID,
	FILE_SIZE_MB = convert(decimal(12,2),
	round(a.size/128.000,2)),
	SPACE_USED_MB = convert(decimal(12,2),
	round(fileproperty(a.name,"SpaceUsed")/128.000,2)),
	FREE_SPACE_MB = convert(decimal(12,2),
	round((a.size-fileproperty(a.name,"SpaceUsed"'))/128.000,2)),
	NAME = left(a.NAME,30),
	a.filename 
 from dbo.sysfiles a'

вот так
с кавычками побовал..
24 сен 12, 12:05    [13211898]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
vpozhidaev
Member

Откуда: Москва
Сообщений: 91
qwertEHOK,

INSERT INTO #ttmp
EXEC sp_MSforeachdb '
Select a.FILEID,
FILE_SIZE_MB = convert(decimal(12,2),
round(a.size/128.000,2)),
SPACE_USED_MB = convert(decimal(12,2),
round(fileproperty(a.name,''SpaceUsed'')/128.000,2)),
FREE_SPACE_MB = convert(decimal(12,2),
round((a.size-fileproperty(a.name,''SpaceUsed''))/128.000,2)),
NAME = left(a.NAME,30),
a.filename
from dbo.sysfiles a'

как то так =)
24 сен 12, 12:10    [13211949]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
qwertEHOK
Member

Откуда: Волгоград
Сообщений: 273
а с курсором не подскажете?

просто в нем удобно исключать из поиска ненужные базы
24 сен 12, 12:12    [13211967]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
qwertEHOK
Member

Откуда: Волгоград
Сообщений: 273
и все равно
 INSERT INTO #ttmp
 EXEC sp_MSforeachdb '
 Select a.FILEID,
 FILE_SIZE_MB = convert(decimal(12,2),
 round(a.size/128.000,2)),
 SPACE_USED_MB = convert(decimal(12,2),
 round(fileproperty(a.name,''SpaceUsed'')/128.000,2)),
 FREE_SPACE_MB = convert(decimal(12,2),
 round((a.size-fileproperty(a.name,''SpaceUsed''))/128.000,2)),
 NAME = left(a.NAME,30),
 a.filename 
 from dbo.sysfiles a'


хоть и пишет (строк обработано: 64)
данные во временной таблице ОДИНАКОВЫЕ
то есть оно из dbo.sysfiles берет
а контекст не меняет (((((
24 сен 12, 12:17    [13212010]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
vpozhidaev
Member

Откуда: Москва
Сообщений: 91
qwertEHOK,

declare @rn int;
declare @db_name sysname;
DECLARE @sql nvarchar(max)
SET @sql = ''

DECLARE db_cursor_chet CURSOR FOR
select rn, Name
from (SELECT row_number() over (order by Name) as rn, Name
FROM sys.databases)t
OPEN db_cursor_chet;

FETCH NEXT FROM db_cursor_chet
INTO @rn, @db_name;

WHILE @@FETCH_STATUS = 0
BEGIN

--INSERT INTO #ttmp
SET @sql = '
Select a.FILEID,
FILE_SIZE_MB = convert(decimal(12,2),
round(a.size/128.000,2)),
SPACE_USED_MB = convert(decimal(12,2),
round(fileproperty(a.name,''SpaceUsed'')/128.000,2)),
FREE_SPACE_MB = convert(decimal(12,2),
round((a.size-fileproperty(a.name,''SpaceUsed''))/128.000,2)),
NAME = left(a.NAME,30),
a.filename
from '+@db_name+'.dbo.sysfiles a'

EXEC sp_executesql @SQL

FETCH NEXT FROM db_cursor_chet
INTO @rn, @db_name;
END
CLOSE db_cursor_chet;
DEALLOCATE db_cursor_chet;
24 сен 12, 12:22    [13212044]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
qwertEHOK
Member

Откуда: Волгоград
Сообщений: 273
с контекстом разобрался :)

помогите с курсором, пожалуйста
24 сен 12, 12:24    [13212064]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
vpozhidaev
Member

Откуда: Москва
Сообщений: 91
qwertEHOK
с контекстом разобрался :)

помогите с курсором, пожалуйста


я же написал как с курсором =) тебе помочь вставить в таблицу или чего? =)
24 сен 12, 12:27    [13212092]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
qwertEHOK
Member

Откуда: Волгоград
Сообщений: 273
курсор немного поправил
теперь отлично

вместо такого
from '+@db_name+'.dbo.sysfiles a'


написал такое
'use '+@db_name+'


спасибо
24 сен 12, 14:55    [13213262]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить