Sql 如何在存储过程中使用运算符和| |运算符

Sql 如何在存储过程中使用运算符和| |运算符,sql,stored-procedures,Sql,Stored Procedures,我在asp.net应用程序中创建了一个数据库文件。现在,我尝试从ServerExplorer编写一个存储过程,如下所示 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)

我在asp.net应用程序中创建了一个数据库文件。现在,我尝试从ServerExplorer编写一个存储过程,如下所示

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

但是当我保存它时,这给了我一个错误,就像您可以使用的附近的错误语法一样!=代替和您可以使用或代替|。

您可以使用!=而不是,你可以使用或代替|。

这里有几个地方不对劲

if(@oldName <> @Name | @oldAddress <> @Address)
如果@oldName不等于@Name,那么@oldName可以是什么?好的,它可以是NULL,但是如果检查的是NULL,那么使用的运算符是错误的吗

我想你想在这里写的是:

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

这里有几件事不对

if(@oldName <> @Name | @oldAddress <> @Address)
如果@oldName不等于@Name,那么@oldName可以是什么?好的,它可以是NULL,但是如果检查的是NULL,那么使用的运算符是错误的吗

我想你想在这里写的是:

select @oldName=EmployeeName,@oldAddress = Address from Employee where EmpID = @ID
你应该用还是不用|

您也可以这样做,而不是单独查询和检查每个值,如果名称和/或地址与给定的empid不匹配,这将插入新行

你应该用还是不用|

您也可以这样做,而不是单独查询和检查每个值,如果名称和/或地址与给定的empid不匹配,这将插入新行

SQL只是结构化查询语言-一种被许多数据库系统使用的语言,但不是一种数据库产品。。。像这样的东西是高度特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统和哪个版本…SQL只是结构化查询语言-许多数据库系统使用的语言,但不是数据库产品。。。像这样的东西是高度特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统和哪个版本…感谢Damien如果@oldName@Name或@olddress@Address,它可以工作感谢Damien如果@oldName@Name或@olddress@Address,它可以工作
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