4

考虑以下查询,其中只有数据库名称不同(在同一服务器上)

Select * from sampledev.dbo.Sample
Select * from sampleqa.dbo.Sample

上述查询是过程的一部分。每次我必须运行该过程时,我都必须确保它引用了正确的数据库(如果不是,请重命名)。

我想将数据库名称作为参数传递给存储过程。问题是,有可能吗?如果是,如何?

4

2 回答 2

3

您可以使用sp_executesql

DECLARE @Database   NVARCHAR(255),
        @Query      NVARCHAR(MAX)

SET @Database = 'Database'
SET @Query = N'SELECT * FROM ' + @Database + '.dbo.Table'

EXEC sp_executesql @Query
于 2013-09-25T20:17:55.240 回答
0

像这样简单的东西:?

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 行受影响)

于 2013-09-25T20:17:44.943 回答