我试图从不是服务器的员工创建阻止订单。这是我的diagram该项目。我的代码,我创建运行正常,但我还可以凭谁不是在“服务器”练习SQL CHECK CONSTRAINT with FUNCTION
CREATE FUNCTION dbo.chk_server_position(@employee_ID int)
RETURNS varchar(50)
AS
BEGIN
DECLARE @position varchar(50);
DECLARE @employeeID int;
DECLARE @output varchar(50);
SELECT @position = employee.position, @employeeID = orderInfo.employee_ID
FROM employee, orderInfo
WHERE employee.employee_ID = orderInfo.employee_ID
IF (@position = 'server')
SET @output = 'true'
return @output;
END;
GO
ALTER TABLE orderInfo
ADD CONSTRAINT chk_position CHECK (dbo.chk_server_position(employee_ID) = 'true')
显然,我已经改变了代码,这
CREATE FUNCTION dbo.chk_server_position(@employee_ID int)
RETURNS varchar(50)
AS
BEGIN
DECLARE @position varchar(50);
DECLARE @employeeID int;
DECLARE @output varchar(50);
SET @employeeID = (SELECT employee_ID FROM orderInfo)
SET @position = (SELECT position FROM employee, orderInfo
WHERE employee.employee_ID = orderInfo.employee_ID AND employee.employee_ID = @employee_ID)
IF (@position = 'server')
SET @output = 'true'
return @output;
END;
GO
员工插入和现在,我得到错误信息 子查询返回多个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。 运行
ALTER TABLE orderInfo
ADD CONSTRAINT chk_position CHECK (dbo.chk_server_position(employee_ID) = 'true')
哪种方法更接近导致什么时候?
试过了,仍然无法正常工作,我仍然可以插入EMPLOYEE_ID为了谁不是“服务器“ –