Sql server 是否可以将db name作为参数传递
我有大约100个网站建立在cms中,每个网站都有自己的数据库。每个数据库都有相同的表 我的存储过程需要选择给定sitename的数据库中的所有页面 下面我尝试将数据库名称作为参数传递,但它似乎不起作用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
...
@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