Sql server 使用逐个获取的值为product表添加日期。我需要光标吗?请检查下面的答案。这将是更容易的方法来满足您的要求。另外,如果返回的记录是多个的,你能给一个变量分配多个值吗?你能告诉我我的答案有什么问题吗?谢谢 CREATE PROCEDURE [dbo

Sql server 使用逐个获取的值为product表添加日期。我需要光标吗?请检查下面的答案。这将是更容易的方法来满足您的要求。另外,如果返回的记录是多个的,你能给一个变量分配多个值吗?你能告诉我我的答案有什么问题吗?谢谢 CREATE PROCEDURE [dbo,sql-server,sql-server-2008-r2,sql-update,nullable,isnull,Sql Server,Sql Server 2008 R2,Sql Update,Nullable,Isnull,使用逐个获取的值为product表添加日期。我需要光标吗?请检查下面的答案。这将是更容易的方法来满足您的要求。另外,如果返回的记录是多个的,你能给一个变量分配多个值吗?你能告诉我我的答案有什么问题吗?谢谢 CREATE PROCEDURE [dbo].[UpdateCTFamilyRules] AS BEGIN DECLARE @T_1 NVARCHAR(100) = NULL DECLARE @T_2 NVARCH


使用逐个获取的值为product表添加日期。我需要光标吗?请检查下面的答案。这将是更容易的方法来满足您的要求。另外,如果返回的记录是多个的,你能给一个变量分配多个值吗?你能告诉我我的答案有什么问题吗?谢谢
    CREATE PROCEDURE [dbo].[UpdateCTFamilyRules]
    AS     
    BEGIN       
        DECLARE @T_1 NVARCHAR(100) = NULL
        DECLARE @T_2 NVARCHAR(100) = NULL   
        DECLARE @Fl NVARCHAR(100) = NULL    

        DECLARE @T1 NVARCHAR(100) = NULL
        DECLARE @T2 NVARCHAR(100) = NULL    
        DECLARE @F NVARCHAR(100) = NULL 

    Select  @T_1 = p.T1, 
            @T_2 = p.T2, 
            @Fl = p.F
    from Product p  
    where p.Manufacturer_Name = 'Dell'; 


    Select  @T1 = r2.T1, 
            @T2 = r2.T2, 
            @F = r2.F
    from Product p
    join Rule1 r1 on p.Product_Code = r1.Product_Code
    join Rule2 r2 on r1.MajorCode = r2.Product_Family
    where p.Manufacturer_Name = 'Dell';         

    BEGIN       
        DECLARE @sqlCommand VARCHAR(8000)       
        DECLARE @Starter VARCHAR(100)

        SET @Starter = 'SET '
        SET @sqlCommand = 'UPDATE Product '

        BEGIN               
            IF ( @T1 IS NOT NULL) AND ( @T1 <> @T_1 )  BEGIN   SET @sqlCommand = @sqlCommand + @Starter + 'T1 = ''' + @T1 + ''''  SET @Starter = ', ' END
            IF ( @T2 IS NOT NULL) AND ( @T1 <> @T_2)  BEGIN   SET @sqlCommand = @sqlCommand + @Starter + 'T2 = ''' + @T2 + ''''  SET @Starter = ', ' END
            IF ( @F IS NOT NULL)  AND ( @F <> @Fl ) BEGIN   SET @sqlCommand = @sqlCommand + @Starter + 'F = ''' + @F + ''''  SET @Starter = ', ' END    
        END

        -- if any one column  get updated in DB then automatically starter sets to , then execute dynamic sqlCommand else ignore..

        IF (@Starter = ', ')
        BEGIN       
            SET @sqlCommand = @sqlCommand + @Starter + ' Last_Modify_Date = ''' + CONVERT(VARCHAR(22),SYSDATETIME(),121) + '''' 
            SET @sqlCommand = @sqlCommand + ' from Product p
                join Rule1 r1 on p.Product_Code = r1.Product_Code
                join Rule2 r2 on r1.MajorCode = r2.Product_Family 
                WHERE p.Manufacturer_Name = ''' + 'Dell' + ''''         
            EXEC (@sqlCommand)
       END      
    END 
END
MERGE Prodcut AS TARGET
USING (
        SELECT   R2.Manufacturer_Name, 
                 R2.T1, 
                 R2.T2, 
                 R2.F
        FROM     Product P
                 INNER JOIN Rule1 R1 ON P.Product_Code = R1.Product_Code
                 INNER JOIN Rule2 R2 ON R1.MajorCode = R2.Product_Family
       ) AS SOURCE ( Manufacturer_Name, T1, T2, F ) 
         ON (TARGET.Manufacturer_Name = SOURCE.Manufacturer_Name) -- Match on condition
WHEN MATCHED AND (TARGET.T1 <> SOURCE.T1 OR 
                  TARGET.T2 <> SOURCE.T2 OR 
                  TARGET.F <> SOURCE.F) -- Find non matched columns
THEN 
UPDATE SET   TARGET.T1 = SOURCE.T1, 
             TARGET.T2 = SOURCE.T2, 
             TARGET.F = SOURCE.F -- Update non matched columns