我有一张主表"维修"和详细信息表" RepairDetails"当我从应用程序发送适当的参数时,我正在尝试编写一个更新两个表的过程。这是我的SQL:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UpdateRepair]
@RepairID bigint,
@TypeID bigint = NULL,
@Directions nvarchar(3000) = NULL,
@NewDetails NewDetails READONLY
AS
BEGIN
SET NOCOUNT ON;
UPDATE Repairs
SET
TypeID = ISNULL(@TypeID, TypeID),
Directions = ISNULL(@Directions, Directions),
LastUpdate = SYSDATETIME()
WHERE RepairID = @RepairID;
IF @NewDetails IS NOT NULL UpdateRepairDetails;
END
其中" NewDetails"是用户定义的表类型和" UpdateRepairDetails"是一个不同的存储过程,它将@RepairID和@NewDetails作为参数。
我有一个错误和一个问题。错误消息是:
Must declare the scalar variable "@NewDetails"
我不明白,因为它已被定义。
我的问题是:参数" @ RepairID"和" @ NewDetails"自动传递给" UpdateRepairDetails"程序。如果没有,实现这个目标的正确方法是什么?
答案 0 :(得分:0)
您不能将NULL分配给表变量。因此,您无法检查表变量是否为NULL。
第二:没有。你应该按如下方式打电话:
EXEC UpdateRepairDetails @RepairID, @NewDetails;