Sql server 是否可以将db name作为参数传递

Sql server 是否可以将db name作为参数传递,sql-server,stored-procedures,Sql Server,Stored Procedures,我有大约100个网站建立在cms中,每个网站都有自己的数据库。每个数据库都有相同的表 我的存储过程需要选择给定sitename的数据库中的所有页面 下面我尝试将数据库名称作为参数传递,但它似乎不起作用 ... @site nvarchar(250) AS SELECT * FROM @site..cmsDocument WHERE published = 1 还有其他方法吗?几乎没有DBMS允许您以这种方式使用参数。通过连接构建动态查询并执行它 SELECT @dbname = quote

我有大约100个网站建立在cms中,每个网站都有自己的数据库。每个数据库都有相同的表

我的存储过程需要选择给定sitename的数据库中的所有页面

下面我尝试将数据库名称作为参数传递,但它似乎不起作用

...
@site nvarchar(250)

AS

SELECT *
FROM @site..cmsDocument
WHERE published = 1

还有其他方法吗?

几乎没有DBMS允许您以这种方式使用参数。通过连接构建动态查询并执行它

SELECT @dbname = quotename(dbname)
SELECT @sql = ' SELECT ... FROM ' + @dbname + '.dbo.tablename WHERE ...'
EXEC sp_executesql @sql, @params, ...
参考文献:


您可以在连接字符串中指定数据库:


数据源=myserver地址初始目录=myDataBase;用户Id=我的用户名;密码=我的密码

您可以使用未记录的存储过程sp_MSforeachdb:
sp_MSforeachdb“SELECT*FROM?.table_name_here”

如果查询/过程是从.NET应用程序执行的,您还可以通过编程方式更改连接对象(VB.NET)的数据库:


使用带有分布式查询符号的动态SQL是唯一的方法。
Using da As New SqlDataAdapter("SELECT * FROM cmsDocument WHERE published = 1", GetDatabaseConnection(ServerName))
     da.SelectCommand.Connection.ChangeDatabase("Foobar")
End Using