2012-09-13 93 views
1

我想为此sql语句创建一个以前工作正常的视图。但是当我将它创建为视图时,出现一个错误提示,"View's SELECT contains a variable or parameter."任何人都可以告诉我错误在哪里,因为我对MySQL中的视图很陌生。谢谢!在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

的可能重复[灿我用MySQL中的参数创建视图?](http://stackoverflow.com/questions/2281890/can-i-create-view-with-parameter-in-mysql) – zerkms

回答

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 
+0

select语句提示错误,指出“未知列a.AllocationDate在where子句中”对此有何想法? – Philemon

+0

您是否使用我的查询查看?你会注意到,我已经在a.AllocationDate和a.LocationName的视图定义查询中添加了2列,因为你需要它们在where子句 – InSane

+0

哦好吧注意到了。谢谢 – Philemon

1

VIEW s 不能像存储过程和函数那样有参数。 SO用户以前已回复此问题:view with parameter

+0

好奇你为什么不用d关闭投票重复链接。 – zerkms