Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> экспорт в файл, из системной вьюшки 
:(
    Опции темы
NoraS
Дата 10.11.2017, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.9.2010

Репутация: нет
Всего: нет



Мои приветствия,
есть MS Sql сервер 2012, надо выгрузить названия всех баз (кроме системных) с их размером в текстовый файл и научить сервер данную процедуру производить ежедневно в автоматическом режиме.
Так как это мой первый опыт  с MS Sql работы с написан вот такой запрос:
Код

select DB_Name(database_id), SUM(size * 8.0 / 1024) from sys.master_files where database_id > 4 group by database_id


но при попытке  выгрузить файл через bcp выдается сообщение, что с системной вьюшкой в данной версии данная операция невозможна.
Через студию в ручном режиме все замечательно выгружается.
sqlcmd  тоже выдает синтаксическую ошибку на все параметры 
Поэтому вопрос такой, каким способами еще можно осуществить поставленную задачу?
PM MAIL   Вверх
Akina
Дата 10.11.2017, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Попробуй через CTE:

Код

WITH cte (dbname, dbsize) 
AS  (
    select DB_Name(database_id), SUM(size * 8.0 / 1024)
    from sys.master_files 
    where database_id > 4 
    group by database_id
    )
SELECT dbname, dbsize
FROM ste

В крайнем случае задействуй временную таблицу.

Это сообщение отредактировал(а) Akina - 10.11.2017, 14:21


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
NoraS
Дата 14.11.2017, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.9.2010

Репутация: нет
Всего: нет



спасибо сработало
 и второй вопрос из этой же оперы
Код

print '{"data":['; select '{"{#BASENAME}":"'+DB_Name(database_id)+'"},' from sys.master_files where database_id > 4 group by database_id; print ']}';

замечательно срабатывает в студии.
При попытке:
Код

bcp "print '{"data":['; select '{"{#BASENAME}":"'+DB_Name(database_id)+'"},' from sys.master_files where database_id > 4 group by database_id; print ']}';" queryout D:\temp\base1.txt -c -T

выдается синтаксическая ошибка, помогите её найти
PM MAIL   Вверх
Akina
Дата 14.11.2017, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Где полностью подготовленная строка команды? кому нужен код её сборки...
И где цитата сообщения об ошибке?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
NoraS
Дата 15.11.2017, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.9.2010

Репутация: нет
Всего: нет



Неверно описала. Админам потребовался файл вида
Код

{"data":[{ "{#BASENAME}":"base_1"}, 
{ "{#BASENAME}":"base_2"}, 
{ "{#BASENAME}":"base_3"}]}

Обычным образом не получилось.
Создала процедуру:
Код

CREATE PROCEDURE export
AS 
print '{"data":[' 
select '{ "{#BASENAME}":"'+DB_Name(database_id)+'"},' from sys.master_files where database_id > 4 group by database_id; 
 print ']}';

В итоге:
Код

bcp "EXEC master.dbo.export"queryout D:\temprary\base.txt -c -T

сработало и экспортируется.
Но не передаются стартовые и финальные "заголовки", т.е print '{"data":['  и print ']}';
Вопрос как правильно их добавить в экспортируемый файл?
PM MAIL   Вверх
Akina
Дата 15.11.2017, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Цитата(NoraS @  15.11.2017,  08:35 Найти цитируемый пост)
Админам потребовался файл вида

Обычным образом не получилось.

Ну так выгружайте в JSON, а не в текст...

Добавлено @ 07:58
Кстати, а нафига там группировка?
И ещё - как намерены избавляться от замыкающей запятой у последней записи?
Формально можно, например, так:
Код

CREATE PROCEDURE export
AS 
WITH alldata (num,txt) AS (
SELECT 1,'{"data":[' FROM DUAL
UNION ALL
SELECT 2,'{ "{#BASENAME}":"'+DB_Name(database_id)+'"},' FROM sys.master_files WHERE database_id > 4
UNION ALL
SELECT 3,'"{#BASENAME}":NULL]}' FROM DUAL
)
SELECT txt FROM alldata ORDER BY num;




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
NoraS
Дата 15.11.2017, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.9.2010

Репутация: нет
Всего: нет



Цитата(Akina @ 15.11.2017,  07:48)
Цитата(Akina @  15.11.2017,  08:35 Найти цитируемый пост)
 
Ну так выгружайте в JSON, а не в текст...



Ms sql server 2005 разве может это сделать?
поделитесь ссылкой на ман по данному вопросу
PM MAIL   Вверх
Akina
Дата 15.11.2017, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Цитата(NoraS @  10.11.2017,  14:56 Найти цитируемый пост)
есть MS Sql сервер 2012


Цитата(NoraS @  15.11.2017,  10:16 Найти цитируемый пост)
Ms sql server 2005 разве может это сделать?

Вы бы уж озаботились узнать, какой версии у Вас сервер-то...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
NoraS
Дата 15.11.2017, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.9.2010

Репутация: нет
Всего: нет



их два
на одном необходим был первый вариант запроса - там 2012
на втором - второй - на нем 2005
принадлежат двум разным подразделениям.

Это сообщение отредактировал(а) NoraS - 15.11.2017, 15:21
PM MAIL   Вверх
Akina
Дата 15.11.2017, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Предупреждать надо... самостоятельно о таком догадаться - нереально...
Ну тогда собирайте нужный вид показанным запросом. Писано на коленке, если что - подрихтуй.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1384 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.