Ich führe eine gespeicherte Prozedur aus, die Gebühren zum Einfügen, Aktualisieren und Löschen von Tabelleneinträgen enthält. Während sowohl das Einfügen als auch das Löschen problemlos ausgeführt wird, aktualisiert der Aktualisierungsvorgang alle Spalten außer DATETIME2
.MSSQL DateTime2 konnte nicht aktualisiert werden
Das Szenario - ich meine Repository-Muster testen (unter Verwendung von C# -Code) in folgenden Weise:
- löschen Sie die gesamte
[BackgroundTaskAttachtment]
Tabelle - erstellen 4 neue Einträge
- einzigen Eintrag auf Schritt erstellt lösche 2
- Warten für 5 Sekunden
- einen der Einträge ändern
das Ergebnis 3 Einträge in [BackgroundTaskAttachtment]
Tabelle hat, mit allen Eigenschaften wie erwartet, mit Ausnahme des [UpdatedOnUtc], die nicht aktualisiert werden (es ist gleich [CreatedOnUtc]
ich die aktualisierte Zeile markiert (wie Sie [FilePath]
sehen erfolgreich aktualisiert) wurde: Einsichten Gemeinschaft schätzen würde,
Danke
Dies ist der Code der gespeicherten Prozedur:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_ArrangeBackgroundTaskAttachtments]
(
@backgroundTaskId BIGINT,
@taskAttchs [dbo].[BackgroundTaskAttachtmentType] READONLY
)
AS
BEGIN
SET NOCOUNT ON;
--delete all removed attachtments
DELETE FROM [BackgroundTaskAttachtment]
WHERE [BackgroundTaskId] = @backgroundTaskId AND [Id] NOT IN (SELECT [Id] FROM @taskAttchs)
----Update exist key-value pairs
UPDATE [dbo].[BackgroundTaskAttachtment]
SET
[IsPrimary] = attachs.[IsPrimary],
[FilePath] = attachs.[FilePath],
[Bytes] = attachs.[Bytes],
[UpdatedOnUtc] = GETUTCDATE()
FROM @taskAttchs AS attachs
WHERE attachs.[Id] = [BackgroundTaskAttachtment].[Id]
--insert new records
SELECT @backgroundTaskId AS [BackgroundTaskId], [FilePath], [IsPrimary], [Bytes], GETUTCDATE() AS [CreatedOnUtc], GETUTCDATE() AS [UpdatedOnUtc]
INTO #Temp FROM @taskAttchs as atcs
WHERE atcs.[Id] NOT IN (SELECT [Id] FROM [BackgroundTaskAttachtment] AS bta WHERE bta.[BackgroundTaskId] = @backgroundTaskId)
INSERT INTO [BackgroundTaskAttachtment]([BackgroundTaskId], [IsPrimary], [Bytes], [FilePath], [CreatedOnUtc], [UpdatedOnUtc])
SELECT [BackgroundTaskId], [IsPrimary], [Bytes], [FilePath], [CreatedOnUtc], [UpdatedOnUtc]
FROM #Temp
END
Dies ist der Tabellentyp (von CLR SQL gesendet)
CREATE TYPE [dbo].[BackgroundTaskAttachtmentType] AS TABLE(
[Id] [BIGINT] NOT NULL,
[FilePath] [NVARCHAR](MAX) NULL,
[IsPrimary] [BIT] NOT NULL,
[BackgroundTaskId] [BIGINT] NULL,
[Bytes] [VARBINARY](MAX) NULL
)
GO
dies ist die Tabellendefinition
CREATE TABLE [dbo].[BackgroundTaskAttachtment]
(
[Id] BIGINT IDENTITY(1,1) NOT NULL,
[BackgroundTaskId] BIGINT NOT NULL,
[IsPrimary] BIT NOT NULL DEFAULT 0,
[FilePath] NVARCHAR(MAX) NULL,
[Bytes] VARBINARY(MAX) NULL,
[CreatedOnUtc] DATETIME2 NOT NULL,
[UpdatedOnUtc] DATETIME2 NOT NULL,
[RowVersion] ROWVERSION NOT NULL,
CONSTRAINT [PK_dbo.BackgroundTaskAttachtment] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_dbo.BackgroundTaskAttachtment_BackgroundTask_Id]
FOREIGN KEY ([BackgroundTaskId])
REFERENCES [dbo].[BackgroundTask] ([Id])
ON DELETE CASCADE
);
Nein - es hat nicht geholfen - immer noch das gleiche Problem –