0

对于这里的所有专家.. 我是存储过程的新手。

我真的需要帮助,我的问题是,是否可以将参数用作数据库名称

以下是我的示例:

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是我的参数..它返回一个错误。

任何建议将不胜感激。

谢谢...

4

2 回答 2

1

一种替代方法是构建一个视图,其中包含表名并加入该视图

SELECT 't1'as tableName ,col1, col2, col3,... from t1
UNION ALL 
SELECT 't2',col1, col2, col3,...  from t2
where
.....
and tableName=@HRTable

但这并不是真正的“完成的事情”。如果您必须这样做,您也可以使用动态 SQL 和 Exec,但可以考虑您是否正在以正确的方式做任何事情。

各种表格中有什么意味着您不能将它们放在一张桌子上?

于 2013-09-28T15:33:18.833 回答
0

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

于 2013-09-29T05:23:32.877 回答