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,则可以生成更新错误消息

希望对某人有所帮助......