1

Teradata では、クエリで単一の挿入ステートメントを使用して複数のレコードを挿入できますか。はいの場合、どのように?

次のようなことをしようとしているとしましょう:

insert test_rank (storeid,prodid,sales) values (1,'A',1000) ( 2,'B',2000) ,(3,'C',3000); 

しかし、これは teradata では機能せず、3 つのレコードすべてを 1 つのステートメントに挿入できません。

4

4 に答える 4

4
INSERT INTO test_rank (storeid, prodid, sales)
SELECT * 
FROM (SELECT * 
      FROM (SELECT 0 storeid, 
                   1 prodid, 
                   2 sales) T1 
      UNION ALL 
      SELECT * 
      FROM (SELECT 3 storeid, 
                   4 prodid, 
                   5 sales) T2
      UNION ALL 
      SELECT * 
      FROM (SELECT 6 storeid, 
                   7 prodid, 
                   8 sales) T3
      ...
)T;

ありがとう、ロブ!あなたのアドバイスは私を助けました。

于 2013-09-06T09:30:53.177 に答える
1

これがどれほど実用的かはわかりませんが、技術的には次のことが可能です。

INSERT INTO MyTable
SELECT *
  FROM 
( SELECT 1 AS StoreID
       , 'A' AS ProdID
       , 1000 AS SALES
  UNION
  SELECT 2 
       , 'B'
       , 2000
  SELECT 3
       , 'C'
       , 3000
) DT1
;

第 2 に、BTEQ を使用している場合は、フラット ファイルの単一の INSERT ステートメントを繰り返し使用してテーブルをロードする USING コマンドを調べることができます。ただし、その時点で、適切なボリュームで何かを実行している場合は、ボリュームに応じて適切なロード ユーティリティ (MultiLoad または FastLoad) を利用してこのタスクを実行することもできます。

編集 - 2015-12-10

上記の SQL は、UNION 内の各 SELECT が最初に派生テーブルに配置されない限り実行されません。正しい構文については、Anatoly からの以下の回答を参照してください。

于 2012-12-20T14:34:09.047 に答える
1

小さなデータを扱っている場合は、テキスト ファイル内に値を入れて、Teradata SQLA でインポートすることができます。

タブで区切られた、入力内容からなるテキスト ファイルを作成します (お使いのバージョンでタブが機能しない場合はコンマを使用してください)。

1   A   1000
2   B   2000
3   C   3000

次に、SQLA でインポート モードを選択し、[ファイル] -> [データのインポート] を選択して、次のステートメントを実行します。

insert into YourTable values (?, ?, ?);

正しいデータ型を使用して、事前にテーブルを作成してください。

于 2013-01-23T07:27:02.213 に答える
0

複雑な動的挿入を試みるよりも、データを使用してテーブルを作成する方が便利な場合があります。

CREATE TABLE  db.Inc_Config  AS (
SELECT
c.calendar_date,
null  as  Sent_To,
CURRENT_TIMESTAMP as  Sent_Date,
date '2016-01-01' as  Inc_Start_Date,
date '2016-02-29' as  Inc_End_Date
FROM  sys_calendar.CALENDAR c  
WHERE 
c.calendar_date BETWEEN date '2016-01-01' AND date '2016-02-29' 
) WITH data;
于 2016-03-21T15:49:53.640 に答える