Ich habe geschrieben gespeicherte Prozedur folgt, die eine Update-Anweisung dynamisch erstellt Produkt Tabelle mit den entsprechenden Werten von Rule1 und Rule2 Tabellen zu bestimmten Joinbedingungen geholt zu aktualisieren.Erzeugen Dynamisch Aktualisierungsabfrage
Das Problem, das ich mit Blick auf bin, ist, dass, wenn ich den Vergleich original Produkt Tabellenwerte mit den Werten von verbindet kommen, dann ist die Update-Abfrage bildet nicht.
die ursprünglichen Werte, die Tabelle in Produkt vorliegen können oder nicht NULL sein. Ich muss überprüfen, ob die ursprünglichen Werte nicht gleich sind, und dann die entsprechende Spalte mit dem Wert aktualisieren.
hier ist der sp-Code:
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
Bitte lassen Sie mich, wo dieses Problem mit dem Vergleich ist ich bin mit Nullable-Spalte zu tun. Und wenn es dann ist, wie ich es modifizieren kann. Vielen Dank.
Gibt es nur eine Zeile für Manufacturer_Name = 'Dell' in der Produkttabelle? – Aditya
Ich möchte überprüfen, ob die Spalten T1, T2 und F in der ursprünglichen ** Produkt ** Tabelle null sind oder einen Wert haben. Wenn null oder ein anderer Wert als das, was von join kommt, dann aktualisiere diese Spalte sonst lass es so wie es ist. – sarfarazit08
@Aditya: Ja, es werden mehrere Datensätze zurückgegeben. Ich muss alle diese Aufzeichnungen nach dem Beitritt holen. Und dann überprüfen Sie, ob die Produkttabelle Datensätze null oder einen anderen Wert hat, wenn ja, dann aktualisieren Sie die Produkttabelle nacheinander mit den abgerufenen Werten. Benötige ich Cursor, um dies zu tun? – sarfarazit08