Ich möchte eine Liste von Werten als eine Zeile einer bestimmten Tabelle darstellen. Derzeit sieht mein Code wie diesen als Teil eines Upsert:Cast Werteliste als Tabellendefinition
MERGE INTO dbo.MyTable mt
USING (VALUES(1234, 'Val1', GETDATE()))
AS v(ID, Value, DateUpdated)
ON v.ID = mt.ID
WHEN NOT MATCHED THEN
INSERT VALUES(v.ID, v.Value, v.DateUpdated)
WHEN MATCHED THEN
UPDATE SET mt.Value = v.Value;
Idealerweise würde mein Code aussehen wie folgt aus:
MERGE INTO dbo.MyTable mt
USING (VALUES(1234, 'Val1', GETDATE()))
AS v(typeof(dbo.MyTable)) --TABLE DEFINITION, NO DUPLICATE TYPING
ON v.ID = mt.ID
WHEN NOT MATCHED THEN
INSERT VALUES(v.ID, v.Value, v.DateUpdated)
WHEN MATCHED THEN
UPDATE SET mt.Value = v.Value;
Wo „typeof“ die Definition meiner Tabelle ermöglicht für beide verwendet werden Werttyp Casting und Namenscasting.
In einem Wort .... oder? Sie können nicht einfach einen Tabellennamen für eine Liste von Spalten in einem Tabellenkonstruktor ersetzen. So funktioniert das nicht. –
Dies funktioniert in anderen Datenbanken wie Postgres, Sie können eine Liste von Werten in eine Tabelle "Typ" umwandeln. – danjuggler
Es ist unklar, was Sie fragen. Insbesondere ist unklar, was 'AS v (dbo.MyTable% ROWTYPE)' bedeuten soll, weil 1) wir nicht wissen, was Sie mit dem '%' -Operator machen wollen (weder in ISO SQL noch in T -SQL), 2) Es gibt keinen Zeilentyp in SQL, Tabellen haben nur jeweils einen Typ von Zeile und 3) Was in dieser Klausel angegeben wird, ist weder ein Rottyp noch eine Tabelle, es ist ein Spaltensatz, der sein muss eine Teilmenge der Spalten der zuvor angegebenen Tabelle. – RBarryYoung