Semantik .SCHREIBEN(NULL, NULL, NULL), wenn die Aktualisierung einer Spalte VARBINARY(max)
Welche die Semantik der folgenden Abfrage
UPDATE table
SET column .WRITE(NULL, NULL, NULL)
wenn column
ist VARBINARY(max)
Art und Ihr Inhalt sind nicht NULL
?
Einen quick-test deutet darauf hin, dass die Abfrage
ist eine no-op:
--DROP TABLE [table]
CREATE TABLE [table] ([column] VARBINARY(max))
INSERT INTO [table] VALUES (0x12345678)
UPDATE [table]
SET [column] .WRITE(NULL, NULL, NULL)
SELECT * FROM [table]
Ausführung nicht verändert, die Daten in der column
. Aber ich kann nicht scheinen, Beweise zu finden, in der Dokumentation. Habe ich etwas übersehen, oder ist das no-op Verhalten wahrscheinlich ändern?
- Was bedeutet "no-op" für Sie bedeuten? Ihre syntax ist falsch, da die Dokumentation, die Sie verknüpft zeigt (siehe die Beispiele unter "Aktualisieren von Large Object-Datentypen"). Dies funktioniert für mich:
update dbo.Mytable set MyColumn.Write(null, null, null)
- Vielen Dank, bearbeitet. Es funktioniert bei mir auch, aber ist dieses Verhalten dokumentiert?
- Ich weiß nicht, was du fragst: was ist "dieses Verhalten"? Die Parameter werden dokumentiert, und die Bemerkungen, die sagen, dass Sie können nicht einen Wert auf NULL oder aktualisieren einer NULL-Spalte-Wert mit
write
. Es klingt wie Sie sehen etwas, was Sie nicht erwarten oder verstehen, aber da Sie noch nicht gezeigt, Abfrage-Ergebnisse oder der Ausgaben bin ich mir nicht sicher, was jemand sagen kann, Sie. Wenn Sie buchen ein komplettes lauffähiges Beispiel, das zeigt genau das Verhalten, dass Sie Fragen, jemand könnte in der Lage sein, es zu klären. - Bearbeitet.
- Eigentlich ist der doc, dass Sie eine Verbindung zu logisch impliziert, dass
.WRITE(NULL,NULL,NULL)
werden versuchen, kürzen Sie die Spalte in die Länge, dass es bereits ist. I. E., die praktisch ein no-op. - Pflege zu erarbeiten, diese in eine Antwort? Ich werde froh sein, um die Auszeichnung eine Prämie für eine logische Erklärung 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich eine sorgfältige Lektüre der doc, dass war verbunden mit (hier) logisch impliziert, dass
.WRITE(NULL,NULL,NULL)
sollten versuchen, kürzen Sie die Spalte in die Länge, dass es bereits ist. I. E., die praktisch ein no-op.Beachten Sie die kursiven Abschnitte in diesem Auszug aus der Doc:
Also, wenn
@Offset
NULL ist, dann ist es behandelt, als wäre es die aktuelle Länge der Spalte.Und, wenn
expression
ist NULL, die Spalte ist abgeschnitten, an der@Offset
Wert.Ergo, wenn beide NULL sind, dann wird die Spalte wird abgeschnitten, bei der derzeitigen Länge. Was ich zu bedeuten, dass es praktisch nichts.
@Length
ignoriert, daexpression
istNULL
, und, weil@Offset
istNULL
. Also in der Tat das beobachtete Verhalten ist die einzige logische Erklärung. Ich Frage mich nur, warum dies nicht ausdrücklich... vielen Dank für die sorgfältige Analyse!