我该如何使用<>运算符和||存储过程中的运算符

时间:2012-12-28 11:17:04

标签: sql stored-procedures

我在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 <一样保存它时,这会给我一个错误。

3 个答案:

答案 0 :(得分:4)

这里有几个问题

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

行不通 - 也许试试

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

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

即:

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

@oldName可以是什么,如果不等于@Name? (好的,它可能是NULL,但如果您正在检查<>,则NULL是错误的运算符。

你想写的是:

select @oldName=EmployeeName,@oldAddress = Address from Employee where EmpID = @ID

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用!=代替“&lt;&gt;”你可以用Or代替“|”。