我们可以将SQL查询中的数据库名称作为参数传递吗?

时间:2013-09-25 20:08:14

标签: sql sql-server database tsql stored-procedures

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'pampleqa'

  

结果

     
     

qa数据

     

(1行受影响)