不要了解SQL过程错误

时间:2017-08-13 20:22:51

标签: sql-server stored-procedures

我有一张主表"维修"和详细信息表" 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"程序。如果没有,实现这个目标的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您不能将NULL分配给表变量。因此,您无法检查表变量是否为NULL。

第二:没有。你应该按如下方式打电话:

EXEC UpdateRepairDetails @RepairID, @NewDetails;