我想为此sql语句创建一个以前工作正常的视图。但是当我在视图中创建它时,一个错误提示显示,"View's SELECT contains a variable or parameter."
任何人都可以告诉我错误在哪里,因为我对MySQL中的视图很新。谢谢!
CREATE VIEW `satsschema`.`viewTimeBreak` AS
SELECT a.EmpName, CONCAT(b.StartTime, '-', b.EndTime) AS ShiftTime, CONCAT(a.EmpTime, '-', ADDTIME(a.EmpTime, '0 1:0:0.000000')) AS BreakTime, a.Break,
a.EmployeeOnBreak, '' AS SignIn, '' AS SignOut
FROM satsschema.employeeslot a INNER JOIN
satsschema.ufis b ON b.UFISID = a.UFISEmpGroup
WHERE (a.AllocationDate = @AllocationDate) AND (a.LocationName = @LocationName) AND (a.Break = 1)
GROUP BY a.EmpName
这部分显示了当我尝试使用sql语句创建视图时的错误。
答案 0 :(得分:1)
VIEW
s 不能拥有参数,就像存储过程和函数一样。之前已由SO用户回答: view with parameter 。
答案 1 :(得分:0)
您不能在视图本身的查询定义中使用@AllocationDate和@LocationName等变量。
相反,你可以做的是
CREATE VIEW `satsschema`.`viewTimeBreak` AS
SELECT
a.EmpName,
CONCAT(b.StartTime, '-', b.EndTime) AS ShiftTime, CONCAT(a.EmpTime, '-', ADDTIME(a.EmpTime, '0 1:0:0.000000')) AS BreakTime,
a.Break,
a.EmployeeOnBreak, '' AS SignIn,
'' AS SignOut,
a.AllocationDate,
a.LocationName
FROM
satsschema.employeeslot a
INNER JOIN satsschema.ufis b
ON b.UFISID = a.UFISEmpGroup
然后在使用视图
时设置条件所以你的SELECT语句将是
SELECT * FROM `satsschema`.`viewTimeBreak` a
WHERE
(a.AllocationDate = @AllocationDate)
AND (a.LocationName = @LocationName)
AND (a.Break = 1)
GROUP BY a.EmpName