考虑以下查询,其中只有数据库名称不同(在同一服务器上)
Select * from sampledev.dbo.Sample
Select * from sampleqa.dbo.Sample
上述查询是过程的一部分。每次我必须运行该过程时,我都必须确保它引用了正确的数据库(如果不是,请重命名)。
我想将数据库名称作为参数传递给存储过程。问题是,有可能吗?如果是,如何?
考虑以下查询,其中只有数据库名称不同(在同一服务器上)
Select * from sampledev.dbo.Sample
Select * from sampleqa.dbo.Sample
上述查询是过程的一部分。每次我必须运行该过程时,我都必须确保它引用了正确的数据库(如果不是,请重命名)。
我想将数据库名称作为参数传递给存储过程。问题是,有可能吗?如果是,如何?
您可以使用sp_executesql
DECLARE @Database NVARCHAR(255),
@Query NVARCHAR(MAX)
SET @Database = 'Database'
SET @Query = N'SELECT * FROM ' + @Database + '.dbo.Table'
EXEC sp_executesql @Query
像这样简单的东西:?
CREATE PROC GetData
(
@DatabaseName VARCHAR(255)
)
AS
BEGIN
IF @DatabaseName = 'sampledev'
SELECT * FROM sampledev.dbo.Sample
ELSE IF @DatabaseName = 'sampleqa'
SELECT * FROM sampleqa.dbo.Sample
END
利用:
执行 GetData 'sampledev'
结果
开发数据
(1 行受影响)
执行 GetData 'sampleqa'
结果
质量保证数据
(1 行受影响)