1

我在我的 asp.net 应用程序中创建了一个数据库文件。现在从服务器资源管理器中,我尝试编写如下存储过程

CREATE PROCEDURE insertData
(
@ID int,
@Name varchar(50),
    @Address varchar(50),
@bit BIT OUTPUT
)
as
begin
    declare @oldName as varchar(45)
    declare @oldAddress as varchar(45)

    set @oldName=(select EmployeeName from Employee where EmployeeName=@Name)
    set @oldAddress=(select Address from Employee where Address=@Address)

    if(@oldName <> @Name | @oldAddress <> @Address)
    insert into Employee(EmpID,EmployeeName,Address)values(@ID,@Name,@Address)
    SET @bit = 1
    END

但是当我保存它时,这给了我一个错误,就像Incorrect syntax near <..

4

3 回答 3

4

这里有几件事不对

if(@oldName <> @Name | @oldAddress <> @Address)

行不通-也许试试

if @oldName <> @Name OR @oldAddress <> @Address

当然,这永远不会是真的,因为上面的两个查询(可能而且应该只是一个分配两个变量的查询)确保变量总是相等的。

IE:

set @oldName=(select EmployeeName from Employee where EmployeeName=@Name)

@oldName如果不等于,可以是什么@Name?(好吧,它可能是NULL,但如果是你正在检查的,那么<>使用错误的运算符)NULL

你想在这里写的是:

select @oldName=EmployeeName,@oldAddress = Address from Employee where EmpID = @ID
于 2012-12-28T11:20:11.230 回答
1

你应该使用OR而不是|

您也可以这样做,而不是分别查询和检查每个值,如果name和/或address不匹配给定的值,这将插入新行empid

IF NOT EXISTS (
select * from Employee 
where EmpID = @ID AND EmployeeName = @Name AND Address = @Address)
  insert into Employee(EmpID,EmployeeName,Address)values(@ID,@Name,@Address)
  SET @bit = 1
END
于 2012-12-28T11:27:49.487 回答
0

您可以使用 != 代替“<>”,也可以使用 Or 代替“|”。

于 2012-12-28T11:19:53.397 回答