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