2013-10-04 2 views
0

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

Так, например:

Основная база - MyDB
базы данных пользователя - userDB (это хранится в myDB.dbo.tblUserDatabase)
userDB имеет таблицу с именем tblUserReports

Я хочу написать что-то вроде этого в динамическом SQL:

SELECT * FROM userDB.dbo.tblUserReports 

Так пытался:

declare @dbUser varchar(50) 
set @dbUser = (SELECT strDBName FROM myDB.dbo.tblUserDatabase) 

SELECT * FROM @dbUser.dbo.tblUserReports 

ответ

2

Вы можете сделать это ... динамический sql может стать неуправляемым очень быстро, поэтому будьте осторожны.

declare @dbUser varchar(50) 
set @dbUser = (SELECT strDBName FROM myDB.dbo.tblUserDatabase) 

DECLARE @sql NVARCHAR(1000) 
SET @sql = 'SELECT * FROM ' + QUOTENAME(@dbUser) + '.dbo.tblUserReports' 

EXEC sp_executesql @sql 
+2

Используйте 'QUOTENAME (@dbUser)' для небольшой дополнительной защиты. –

+0

Хорошая точка. Спасибо. Отредактировано по вашему предложению. –

1

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

Смежные вопросы