0

SAS から、MS Access のテーブルを別のテーブルの値で更新しています。更新中のテーブルの一部のフィールドにスペースが含まれています。これにより、更新ステートメントで問題が発生しているようです。これにより、「パラメーターが少なすぎます。1が必要です。」というエラーが表示されます。

update [Original Table] as a inner join Updates as b on a.ID = b.ID
set a.[Variable 1] = b.[Variable 1]
where Year = "2000";

スペースを含まないフィールド名の場合、ステートメントはエラーなしで機能します。また、テーブル参照/エイリアスなしで他の場所でフィールド名を使用しているため、[] とエイリアスの組み合わせが問題を引き起こしていると考えています。これに対処するための提案はありますか?

4

3 に答える 3

2

Year()関数に指定した日付値の暦年に対応するバリアント サブタイプ整数を返す関数です。

あなたの場合、という名前のフィールドがあるようですYear。したがって、おそらく「欠落しているパラメーター」は、Year() 関数への期待される日付引数です。

Year角かっこで囲むことにより、db エンジンの混乱を避けることができます。括弧Yearは、関数ではなくオブジェクト (フィールド) 名であるエンジンを示します。

update [Original Table] as a inner join Updates as b on a.ID = b.ID
set a.[Variable 1] = b.[Variable 1]
where [Year] = "2000";

可能な限り、予約語と競合しない名前を使用することをお勧めします。あなたの状況ではそれは現実的ではないかもしれません...しかし、それができれば、あなたが苦しむAccess開発の頭痛の数を減らすことができます. :-)

"名前付けの課題" の詳細については、「Access の問題名と予約語」を参照してください。

申し訳ありませんが、その WHERE 句の問題にもかかわらず、クエリが機能するという点を見落としていました。

db エンジンからの苦情をトリガーする SQL の残りの部分については何もわかりません。そのステートメントを Access で直接テストし、エラーが発生しなかったと仮定します。

これを引き起こす SAS と Access の間の相互作用に特有の何かがある場合は、保存された Access クエリを回避策として使用できます。qrySasTestその SQL を取得し、名前付きクエリ としてAccess データベースに保存します。次にqrySasTest、SAS 側から実行してみます。

于 2012-09-24T20:27:43.063 に答える
1

このクエリは、アクセスから実行する場合と SAS から実行する場合の両方で、そのまま (テーブル名のみを変更して) 機能しました。これは SAS 9.3 64 ビットと Office 2010 64 ビットの場合であるため、両方のバージョンで何か異なることが起こっている可能性がありますが、期待どおりに機能しました。

proc sql; 
connect to access (path="c:\temp\test.accdb"); 
execute 
( 
update [Test2] as a inner join Test as b on a.ID = b.ID
set a.[Variable 1] = b.[Variable 1]
where Year ="2000";
) 
by access; 
disconnect from access; 
quit;
于 2012-09-25T13:59:11.673 に答える
1

SAS アクセスの代わりに libname 参照を使用する場合は、以下に示すように、proc sql ステートメントの後に "dquote=ansi" オプションを使用できます。この例では、mydbms というライブラリ参照を作成しました。

libname mydbms odbc dsn=prompt preserve_names=yes;

    proc sql dquote=ansi;
    update mydbms."Original Table" as a inner join mydbms.Updates as b on a.ID = b.ID
    set a."Variable 1" = b."Variable 1"
    where Year = "2000";
    quit;
于 2015-05-23T16:21:43.927 に答える