我有一个存储在同一个实例上的SQL 2008数据库,但是这个数据库是由用户创建的,名称存储在SQL表中。如何使用动态sql编写select语句或是否有另一种方式
例如:
主数据库 - 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
答案 0 :(得分: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
答案 1 :(得分:1)
您无法参数化表名称。您必须在客户端或存储过程中使用动态SQL。这是一件非常不寻常的事情。如果这是一个好的设计很难。也许如果你分享你正在做的事情,那么你会得到一些关于如何处理问题的其他想法。