0
値のリストを特定のテーブルの行として表現したい。現在、私のコードは、アップサートの一環として、次のようになります。テーブル定義としての値のキャストリスト
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;
理想的には私のコードは、より次のようになります。
「typeof演算は、」私のテーブルの定義は、両方に使用することができます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;
値の型キャストと名前のキャスト
、これを試してみてください?表のコンストラクタ内の列のリストの表名を置き換えることはできません。それはどのように動作するのではありません。 –
これはPostgresのような他のデータベースでも機能し、値のリストをテーブル "タイプ"にキャストできます。 – danjuggler
あなたが何を求めているのかは不明です。具体的には、1) '%'演算子の意図がわからない(ISO SQLでもTでも有効ではないため)、なぜAS v(dbo.MyTable%ROWTYPE) -SQL)、2)SQLには行タイプ、表にはそれぞれ1種類の行しかありません.3)この節で指定されているのは、行タイプでもテーブルでもない列セットです。以前に指定された表の列のサブセット – RBarryYoung