0

期間不會更新這是我剛纔的問題 sql update for dynamic row number獲取其值多行更新

這一次我有一個更新的需求的延續行的鍵值。 我有2個表 CraftTypes & EmployeeCraftTypes

我需要在CraftType表更新多行和 我能夠更新按照由TheGameiswar

提供的答案現在沒有在規定的修改。

在表CraftTypes,對於列CraftTypeKey與表EmployeeCraftsTypes的外鍵引用。

如果存在對CraftTypeKeyEmployeeCrafttypes表,則行不應該被更新的條目。 還必須獲取其行值未更新的CraftTypeKey以返回行的FK_restriction狀態。

這是我正在使用的sql查詢。

  CREATE TYPE [DBO].[DEPARTMENTTABLETYPE] AS TABLE 
     (DepartmentTypeKey SMALLINT, DepartmentTypeName VARCHAR(50),DepartmentTypeCode VARCHAR(10) , DepartmentTypeDescription VARCHAR(128)) 

ALTER PROCEDURE [dbo].[usp_UpdateDepartmentType] 

@DEPARTMENTDETAILS [DBO].[DEPARTMENTTABLETYPE] READONLY 

AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @rowcount1 INT 
    BEGIN 

     BEGIN TRY 
    BEGIN TRANSACTION 

     UPDATE D1 
     SET 
      D1.[DepartmentTypeName]=D2.DepartmentTypeName 
      ,D1.[DepartmentTypeCode]=D2.DepartmentTypeCode 
      ,D1.[DepartmentTypeDescription]=D2.DepartmentTypeDescription 

     FROM 
      [dbo].[DepartmentTypes] D1 
     INNER JOIN 
      @DEPARTMENTDETAILS D2 
     ON 
      D1.DepartmentTypeKey=D2.DepartmentTypeKey 

     WHERE 
      D2.[DepartmentTypeKey] not in (select 1 from [dbo].[EmployeeDepartment] where [DepartmentTypeKey]=D2.DepartmentTypeKey) 

     SET @[email protected]@ROWCOUNT 
     COMMIT 
END TRY 
    BEGIN CATCH 
     SET @ROWCOUNT1=0 
     ROLLBACK TRAN 
    END CATCH 

    IF @rowcount1 =0 
     SELECT -174; 
    ELSE 
     SELECT 100; 

    END 
    END 

請幫助 而在此先感謝

回答

0

我想,我想出了一個辦法了這一次。我不確定這是否正確,但足以滿足我的要求。

我從EmployeeCraftsTypes表中選擇了帶有FK參考的不同行作爲第二個選擇查詢。

現在我可以得到由於FK約束而未得到更新的行值。

這是sql查詢我用

ALTER PROCEDURE [dbo].[usp_UpdateCraftType] 

@CRAFTDETAILS [DBO].[CRAFTTABLETYPE] READONLY 

AS 
BEGIN 

SET NOCOUNT ON; 

DECLARE @STATUSKEY TINYINT = (SELECT DBO.GETSTATUSKEY('ACTIVE')) 
DECLARE @ROWCOUNT1 INT 

    BEGIN 


BEGIN TRY 
    BEGIN TRANSACTION 

     UPDATE C1 
     SET 
       [C1].[CraftTypeName]=C2.CRAFTTYPENAME 
       ,[C1].[CRAFTTYPEDESCRIPTION]=C2.CRAFTTYPEDESCRIPTION 
       ,[C1].[StatusKey]=C2.[StatusKey] 
     FROM 
      [dbo].[CRAFTTYPES] C1 
     INNER JOIN 
      @CRAFTDETAILS C2 
     ON 
      C1.CRAFTTYPEKEY=C2.CRAFTTYPEKEY 
     WHERE 
      C2.[CRAFTTYPEKEY] NOT IN (SELECT EC.[CRAFTTYPEKEY] from [dbo].[EmployeeCrafts] EC where EC.[CRAFTTYPEKEY]=C2.[CRAFTTYPEKEY]) 

     SET @[email protected]@ROWCOUNT 
     COMMIT 
END TRY 
    BEGIN CATCH 
     SET @ROWCOUNT1=0 
     ROLLBACK TRAN 
    END CATCH 

     --SET @ROWCOUNT1 = @@ROWCOUNT 

    IF @ROWCOUNT1 =0 
     SELECT -172; 
    ELSE 
    BEGIN 
     SELECT 100; 

     SELECT DISTINCT EC.[CRAFTTYPEKEY],'Value Already Assigned' as Reason 
     FROM [DBO].[EmployeeCrafts] EC 
     JOIN @CRAFTDETAILS C3 
     on C3.[CRAFTTYPEKEY]=EC.[CRAFTTYPEKEY] 
     WHERE EC.[CRAFTTYPEKEY]=C3.[CRAFTTYPEKEY] 


    END 
    END 
END 

現在在Web API方面,我可以檢查是否有通過檢查第二個表中的行數的任何更新失敗。 如果行數大於0,則可以生成更新錯誤消息

希望對某人有所幫助......