如何使用动态变量从数据库中进行选择

时间:2013-10-04 14:23:53

标签: sql-server

我有一个存储在同一个实例上的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

2 个答案:

答案 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。这是一件非常不寻常的事情。如果这是一个好的设计很难。也许如果你分享你正在做的事情,那么你会得到一些关于如何处理问题的其他想法。