提问人:Cato Johnston 提问时间:3/9/2009 最后编辑:Jonathan LefflerCato Johnston 更新时间:9/4/2014 访问量:6903
是否可以将数据库名称作为参数传递
Is it possible to pass db name as a parameter
问:
我在 cms 中构建了大约 100 个站点,每个站点都有自己的数据库。每个数据库都有相同的表。
我的存储过程需要选择给定站点名称的数据库中的所有页面。
下面我试图将数据库名称作为参数传递,但它似乎不起作用。
...
@site nvarchar(250)
AS
SELECT *
FROM @site..cmsDocument
WHERE published = 1
有没有其他方法可以做到这一点?
答:
1赞
Ignacio Vazquez-Abrams
3/9/2009
#1
几乎没有 DBMS 允许您以这种方式使用参数。通过串联构建动态查询并执行它。
3赞
Mitch Wheat
3/9/2009
#2
SELECT @dbname = quotename(dbname)
SELECT @sql = ' SELECT ... FROM ' + @dbname + '.dbo.tablename WHERE ...'
EXEC sp_executesql @sql, @params, ...
裁判:
评论
0赞
Jonathan Leffler
3/9/2009
使用具有分布式查询表示法的动态 SQL 是唯一可行的方法。
2赞
Guffa
3/9/2009
#3
可以在连接字符串中指定数据库:
数据源=myServerAddress;初始目录=myDataBase;用户 Id=myUsername;密码=myPassword;
0赞
Diego
3/9/2009
#4
可以使用未记录的存储过程sp_MSforeachdb: sp_MSforeachdb '从?..中选择 *table_name_here'
0赞
Travis Miller
9/4/2014
#5
如果查询/过程是从 .NET 应用程序执行的,您还可以以编程方式更改连接对象的数据库 (VB.NET):
Using da As New SqlDataAdapter("SELECT * FROM cmsDocument WHERE published = 1", GetDatabaseConnection(ServerName))
da.SelectCommand.Connection.ChangeDatabase("Foobar")
End Using
评论