私はPower Builder(PB)開発者です。 PBを10.5から12.5に移行しましたが、ストアドプロシージャをSQL Server 2005から2012にも移行する必要があります。
Power Builderでプロシージャを実行すると、無効な式のエラーが発生します。以前は、2005年にデータベース互換性の低いモデルを使用していたため、手順をそこで使用できました。 =*
は、右外部結合を記述する古い方法であることを学びました。
例えば:
select *
from A
right outer join
B
on A.bid = B.id
...古いスタイルで書かれています:
select *
from A,
B
where A.bid =* B.id
これは、*=
を使用する私の手順の一部です。
SELECT DISTINCT
a_stmt.cyc_dte,
a_carr.carr_nm,
a_stmt.amt_du_ic
FROM a_stmt,
s_dataccs,
a_carr,
a_icc
WHERE ( a_stmt.ic_cntct_id *= a_icc.ic_cntct_id ) and -- HERE
( a_icc.usg_ind = 'S' ) and
( a_carr.acna = a_stmt.acna ) and
( s_dataccs.acna = a_stmt.acna ) and ( s_dataccs.user_id = @user_id ) and
( ( a_stmt.acna = @acna ) or ( @acna = '' ) ) AND
( ( a_stmt.juris_id = @juris_id ) or ( @juris_id = '' ) ) AND
( a_stmt.jrnl_mo_yr = @jrnl_mo_yr ) AND
( a_stmt.amt_du_ic < 0 )
私はそれを次のように変換しました:
SELECT DISTINCT
a_stmt.cyc_dte,
a_carr.carr_nm,
a_stmt.amt_du_ic
from
a_stmt left outer join a_icc on a_stmt.ic_cntct_id = a_icc.ic_cntct_id
join a_carr on a_stmt.acna = a_carr.acna join s_dataccs on a_stmt.acna = s_dataccs.acna and
( a_icc.usg_ind = 'S' ) and
( s_dataccs.user_id = @user_id ) and
( ( a_stmt.acna = @acna ) or ( @acna = '' ) ) AND
( ( a_stmt.juris_id = @juris_id ) or ( @juris_id = '' ) ) AND
( a_stmt.jrnl_mo_yr = @jrnl_mo_yr ) AND
( a_stmt.amt_du_ic < 0 )
私のアプローチは正しいですか、それともWHERE
条件を追加する必要がありますか?確認する本番データベースへのアクセス権がありません。開発データベースもSQL Server 2012にあります。古いバージョンを実行してチェックすることはできません。誰かがこれで私を助けてくれれば、本当に親切です!
私はすぐにあなたのクエリをつかんで、あなたがどのようにそれを書き直したかを見ずにそれを書き直しました。
SELECT DISTINCT
a_stmt.cyc_dte,
a_carr.carr_nm,
a_stmt.amt_du_ic
FROM a_stmt
LEFT OUTER JOIN a_icc on a_stmt.ic_cntct_id = a_icc.ic_cntct_id
INNER JOIN a_carr on a_carr.acna = a_stmt.acna
INNER JOIN s_dataccs on s_dataccs.acna = a_stmt.acna
WHERE (a_icc.usg_ind = 'S') and
(s_dataccs.user_id = @user_id) and
( ( a_stmt.acna = @acna ) or ( @acna = '' ) ) AND
( ( a_stmt.juris_id = @juris_id ) or ( @juris_id = '' ) ) AND
( a_stmt.jrnl_mo_yr = @jrnl_mo_yr ) AND
( a_stmt.amt_du_ic < 0 ) ;
あなたは私と同じ(または少なくとも基本的に)ものを持っているようですので、私はあなたが良いと言っています。あなたがそれをテストすることができれば当然ですが、私はそれが論理的に同じことであると安心します。