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

时间:2009-03-09 02:17:37

标签: sql-server stored-procedures

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

我的存储过程需要在给定网站名称的情况下选择数据库中的所有页面。

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

...
@site nvarchar(250)

AS

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

还有其他方法吗?

5 个答案:

答案 0 :(得分:3)

SELECT @dbname = quotename(dbname)
SELECT @sql = ' SELECT ... FROM ' + @dbname + '.dbo.tablename WHERE ...'
EXEC sp_executesql @sql, @params, ...

参考文献:

sp_executesql (Transact-SQL)

The Curse and Blessings of Dynamic SQL

答案 1 :(得分:2)

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

数据源= myServerAddress; 初始目录= myDataBase ;用户ID = myUsername;密码= myPassword;

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

Using da As New SqlDataAdapter("SELECT * FROM cmsDocument WHERE published = 1", GetDatabaseConnection(ServerName))
     da.SelectCommand.Connection.ChangeDatabase("Foobar")
End Using