2017-08-13 68 views
1

我有一個主表「維修」和詳細信息表「RepairDetails」我試圖寫一個程序來更新這兩個表,當我從我的應用程序發送相應的參數。這是我的SQL:不明白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

它說'@ NewDetails'不是標變量,而不是它是不確定的。 NewDetails是一個表類型嗎? – Andomar

+0

@Andomar代碼下面的句子回答你的問題。 – SezMe

回答

0

您不能分配NULL來表變量。因此你不能檢查一個表變量是否爲NULL。

二:沒​​有。你應該叫如下:

EXEC UpdateRepairDetails @RepairID, @NewDetails; 
+1

澄清有問題的OP。一個表不是空的;您需要檢查行的存在(例如,如果存在(從xxx選擇*),,,)。 – SMor

+0

我將此標記爲答案,但@SMor添加了一條有用的評論,完全回答了我的問題。感謝這兩個。 – SezMe

+0

@TT。我仍然無法得到這個工作。我已經刪除了空檢查並實現了你的代碼,但是我仍然得到了同樣的錯誤信息。 – SezMe