SQL Server存储过程参数值为databasename

时间:2013-09-28 14:17:16

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

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

我真的需要帮助,我的问题是,是否可以使用参数作为databasename

以下是我的样本:

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

任何建议都将不胜感激。

谢谢...

2 个答案:

答案 0 :(得分: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,如果你必须这样做,但也许可以考虑你是否正在以正确的方式做你正在做的事情。

各种表中的含义是什么意味着你不能将它们合二为一?

答案 1 :(得分:0)

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