0

I have a SQL 2008 database that is stored on the same instance, but this database is created by the user and name is stored in SQL table. How do I write a select statement using dynamic sql or is there a another way

So for example:

Main database - myDB
User database - userDB (this is stored in a myDB.dbo.tblUserDatabase)
userDB has a table called tblUserReports

I want to write something like this in dynamic sql:

SELECT * FROM userDB.dbo.tblUserReports

So tried:

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

SELECT * FROM @dbUser.dbo.tblUserReports
4

2 回答 2

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
于 2013-10-04T14:39:18.727 回答
1

您不能参数化表名。您必须在客户端或存储过程中使用动态 SQL。想要这样做是一件非常不寻常的事情,因此请仔细考虑这是否是一个好的设计。也许如果你分享你正在做的事情,那么你会得到一些关于如何解决你的问题的额外想法。

于 2013-10-04T14:30:27.590 回答