2017-03-21 9 views
1

を見つけていない私は月の終了日が含まれていますが、それは次のようなエラーERROR:属性「2017年2月28日」

ERROR: Prepare error: ICommandPrepare::Prepare failed. : ERROR: Attribute '2017-02-28' not found 
になり、自動変数を持っているのproc SQLを使用してSASで実行する次のクエリを持っています

問合せ:

proc sql; 
connect to oledb (datasource='10.1.0.105' provider=nzoledb 
    user=&user_id password=&pwd properties=('initial catalog'=ODS)); 
create table &user..Pers_test as select * from connection to oledb 
(SELECT a.ID from DBO.Table1 
    where a.SOURCE_SYSTEM_CREATED_DTM <= "&monthend." 
Group by a.SWID order by a.SWID 
); 
%let _sql_xrc=&sqlxrc; 
disconnect from oledb; 
quit; 

タイムスタンプがハードコードされたときにクエリが実行されますが。

proc sql; 
connect to oledb (datasource='10.1.0.105' provider=nzoledb 
    user=&user_id password=&pwd properties=('initial catalog'=ODS)); 
create table &user..Pers_test as select * from connection to oledb 
(SELECT a.ID from DBO.Table1 
    where a.SOURCE_SYSTEM_CREATED_DTM <= '2017-02-28 00:00:00' 
Group by a.SWID order by a.SWID 
); 
%let _sql_xrc=&sqlxrc; 
disconnect from oledb; 
quit; 

キャスト、サブストリングを試しましたが、すべて同じエラーが発生します。自動化された変数については、何か助けてください。

+0

を次のように

単一引用符の下に変数を解決するためのコードではなく、単一引用符のタイムスタンプの周りに二重引用符を使用し、あなたが同じエラーが出るんでしょうか? – Quentin

+0

@Quentin:ハードコーディングされたクエリでは、一重引用符です。自動問合せでは、一重引用符は変数を変換しないため、二重引用符を使用する必要があります。 。 –

+0

私は二重引用符が問題であるかもしれないと思います。問題があるかどうかをテストするには、二重引用符でハードコードされたクエリを実行してみてください。同じエラーが発生した場合は、二重引用符がエラーの原因であることがわかります。もしそうならば、SOや他の場所では、小さな引用符の中で解決されないマクロ変数の問題を解決するさまざまな方法の例がたくさんあります。 – Quentin

答えて

0

変数は一重引用符で解決されないため、二重引用符が使用されていました。しかし二重引用符では、列は値で識別できず、エラーがスローされました。したがって、変数は単一引用符で解決する必要がありました。あなたのハードコード化されたクエリで

cast(%unquote(%str(%')&monthend.%str(%')) as datetime) 
関連する問題