5

データを挿入するためのテーブルを作成する必要があるリクエストに取り組んでいます。だから、明らかに私は最初にテーブルstを削除する必要があります。作成セントの前に。しかし、これを初めて実行すると(テーブルを作成する前に)、テーブルが作成されていないというエラーがポップアップ表示され、ここからテーブルとgoesonが作成されます。したがって、誰かが私のコードを初めて実行するたびに、ドロップテーブルstでこのエラーがポップアップ表示されます。誰かもっと良いアイデアはありますか?

「テーブルが存在する場合はドロップし、それ以外の場合はテーブルを作成する」のようなもの
は、SQLでこれをどのように行うのかわかりません

Drop table table_name; -------------->ここで、テーブルが存在しないというエラーが初めてスローされます。

テーブルtable_nameを作成します

{ すぐ };

ちなみに私はTeradataに取り組んでいますが、単純なSQLロジックが役立ちます。

4

2 に答える 2

11

SYSDBAまたは他の管理者レベルのユーザーが所有する、以下を実行する適切な特権を持つストアード・プロシージャーを作成できDROP TABLEますCREATE TABLE

  1. DBC.Tablesをチェックして、オブジェクトが存在するかどうかを確認します。
  2. オブジェクトが存在する場合は、ドロップします。
  3. DDLを実行して、テーブルを再作成します。CREATE TABLE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATS;

データや統計を新しいテーブルにコピーするかどうかに関する追加のパラメーターを受け入れることで、より動的にすることができます。

BTEQを使用している場合は、同様のことを行うことができます(BTEQコマンドの構文は少しずれているかもしれませんが、要点を理解するのに十分近いかもしれません)。

SELECT 1 
FROM DBC.TABLES 
WHERE DatabaseName = '<TargetDB>'
  AND TableName = '<TargetTable>'
  AND TableKind = 'T' /* Make sure it is in fact a table, not a view, macro etc */


.IF ACIVITYCOUNT = 0 THEN GOTO CreateNewTable;

DROP TABLE <TargetDB>.<TargetTable>;

.IF ERRORCODE = 3807 THEN GOTO CreateNewTable; /* Table dropped by another process? */
.IF ERRORCODE > 0 THEN .QUIT ERRORCODE; /* Unexpected error */

.LABEL CreateNewTable;

CREATE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATISTICS;
于 2012-02-15T19:45:35.047 に答える
1

SASprocsqlはT-SQLのように直接それを行うことはできないようです。とにかく、データセットが存在するかどうかを確認するマクロを作成できます。もしそうなら、最初にそれをドロップします。次に、テーブルを作成します。次のコードのように。

%macro checkDrop(tmpData);
%if %SYSFUNC(exist(&tmpData)) %then %do;
    proc sql;
    drop table &tmpData;
    quit;
    %end;
    %else %do;
    proc sql;
    create table &tmpData (a numberic, b numberic);
    %end;
%mend;
%checkDrop(tmp)
于 2016-05-31T09:19:13.393 に答える