Sql server 检查另一个表中是否存在id
我有一个Customer表和一个order表,在允许我执行脚本的其余部分之前,我正在尝试检查以确保order表中的客户存在于Customer表中 这是导致问题的代码Sql server 检查另一个表中是否存在id,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我有一个Customer表和一个order表,在允许我执行脚本的其余部分之前,我正在尝试检查以确保order表中的客户存在于Customer表中 这是导致问题的代码 alter proc Order @CustomerID int as Declare @CusID int select @CusID = dbo.CustomerTable.CustomerID from dbo.CustomerTable inner join dbo.OrdersTable on dbo
alter proc Order
@CustomerID int
as
Declare @CusID int
select @CusID = dbo.CustomerTable.CustomerID
from dbo.CustomerTable
inner join dbo.OrdersTable
on dbo.CustomerTable.CustomerID
= dbo.OrdersTable.CustomerID
where dbo.OrdersTable.CustomerID = @CustomerID
if(@CusID != @CustomerID)
begin
raiserror('The customer does not exist')
return 1
end
exec Order 44
当我尝试使用不在表中的CustomerID执行脚本时,它不会给我错误消息。任何帮助都将不胜感激。
alterprocedure dbo.[Order]--我刚刚输入完几乎完全相同的内容,这时出现了“new answer”消息。显然,您仍然需要在过程中执行“exec Order 44”。如果您看到名称,op试图执行过程本身,两个过程都称为Order
:),我还认为这是过程内部的另一个过程调用,但不是。
ALTER PROCEDURE dbo.[Order] --<-- Avoid using key words for object names
@CustomerID int
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS
(select 1
from dbo.CustomerTable inner join dbo.OrdersTable
on dbo.CustomerTable.CustomerID = dbo.OrdersTable.CustomerID
where dbo.OrdersTable.CustomerID = @CustomerID)
BEGIN
RAISERROR('The customer does not exist', 16,1)
RETURN 1
END
RETURN @CustomerID;
END
DECLARE @RtnValue INT;
EXECUTE @RtnValue = dbo.[Order] 44
SELECT @RtnValue; --<-- now you can use this value whatever you want to do with it
IF @CusID IS NULL
BEGIN
raiserror('The customer does not exist', 0, 1)
RETURN 1
END