在MySQL中创建视图时出错

时间:2012-09-13 03:01:28

标签: mysql sql views

我想为此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语句创建视图时的错误。

2 个答案:

答案 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