这里的所有专家......我是存储过程的新手。
我真的需要帮助,我的问题是,是否可以使用参数作为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
是我的参数..它会返回错误。
任何建议都将不胜感激。
谢谢...
答案 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)在变量中运行查询文本。