2013-09-28 126 views
0

对于这里的所有专家..我是存储过程的新手。SQL Server存储过程参数值作为数据库名

我真的需要帮助,我的问题是,是否有可能使用的参数作为数据库名

下面是我的示例:

ALTER PROCEDURE [dbo].[SP_EventLogs] 
    (@HRTable as varchar(50)) 
AS 
BEGIN 
    Set NOCOUNT ON 

    SELECT 
     a.*,LOG_ADDBY.ADDBY 
    FROM 
     EVENT_VIEWER a 
    INNER JOIN 
     (SELECT 
      PK, (Lastname + ', ' + Firstname + ' ' + ExtName) as ADDBY 
     FROM 
      @HRTable.[dbo].[EMP_RECORDS]) LOG_ADDBY ON a.PerformBy = LOG_ADDBY.PK 
    ORDER BY 
     a.PerformDate DESC 

    Set NOCOUNT OFF 
END 

@HRTable是我的参数..它返回一个错误。

任何建议将不胜感激。

谢谢...

+1

您应该组合查询字符串然后评估(执行)它。很明显,你会以这种方式失去大部分存储过程的性能优势 – LittleSweetSeas

回答

1

一种选择是建立在其内部具有表名称的视图,并加入到

SELECT 't1'as tableName ,col1, col2, col3,... from t1 
UNION ALL 
SELECT 't2',col1, col2, col3,... from t2 
where 
..... 
and [email protected] 

但是,这是不是真的“天经地义的事。”你也可以使用动态SQL执行,如果你必须这样做,但也许考虑你是否正在以正确的方式做任何事情。

各种表格中的含义是什么,这意味着您不能将它们放入一个表格中?

0

正如我所理解@HRTable是您的数据库名称。这不会工作。你应该使用动态查询。 为查询文本声明变量并将其设置为您的查询,然后使用Exec(@variable)在变量中运行查询文本。

相关问题