Как запросить результаты из другого запроса? - PullRequest
0 голосов
/ 07 октября 2011

Я пишу сценарий Trans-SQL для сервера MSSQL 2005, который намеревается запросить путь к файлу для каждой имеющейся базы данных. Я могу перечислить базу данных, присутствующую в системе. Но как мне запустить отдельный запрос на основе результатов?

Ниже приведен вывод из списка баз данных с помощью команды (SELECT name from sys.databases):

name
----
master
tempdb
model
msdb

Теперь я хотел бы взять имена этой базы данных (например, master, tempdb) и ввести другой запрос, а именно (exec sp_helpdb <database_name>).

есть идеи?

Ответы [ 4 ]

2 голосов
/ 07 октября 2011

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

sp_msforeachdb 'EXEC sp_helpdb [?]'

В противном случае вам понадобится использовать результаты для генерации SQL.

0 голосов
/ 07 октября 2011

Если я правильно понимаю, вы можете использовать производную таблицу здесь: -

выбрать database.name (ваш запрос) из базы данных (SELECT name from sys.databases)

0 голосов
/ 07 октября 2011

В общем случае ответом на ваш вопрос будет «использовать подзапрос».

Но в этом случае вы используете хранимую процедуру SQL Server. Поэтому лучше всего написать свою собственную хранимую процедуру по адресу:

1) вызовите sp_helpdb (или выберите из master..sysdatabase)

2) Перебрать результаты

Вот пример:

http://www.mssqltips.com/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases/

0 голосов
/ 07 октября 2011

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

...