update case文とトリガー

テーブルにupdateトリガーを仕込んで更新日時カラムをcurrent_timestampにupdateさせている状態で

update TableName set TargetColumn=case when OtherColumn=’abc’ then ‘D’ else TargetColumn end

で更新すると更新日時カラムは全レコード現在時刻に変更される

更新クエリの前に

Alter table TableName disable trigger TriggerName

クエリの後に

Alter table TableName enable trigger TriggerName

トリガーは楽な反面、仕込んでいるのを忘れてしまう
今日見直すとこの更新クエリ結局全部更新?
where句でupdate の方が断然速い
なんでもcase で条件分岐すれば良いというわけではないらしい

VBAからSQL ServerのIdentity取得

これは時々必要になるのですが
scope_identity() , ident_current(‘Table’) , @@Identity
の3つの方法があるが他のセッションの影響を受けない scope_identity() が推奨と検索すると出てきます。

しかしVBAからADO ADODBでレコードセットを取って
前略
cn.execute “insert into table・・・”
rs.open “select scope_identity() as ID”,cn,adopendynamic,adlockoptimistic
としても取得してくれないのでしかたなく
rs.open “select ident_current(‘Table’) as ID”,cn,adopendynamic,adlockoptimistic
で取得していました

cursorlocationがserverサイドでdynamicを要求した場合だけ取得できないのに気がつきました
ほかの組み合わせは大丈夫のようです
しかしこのレコードセットのcursortypeは何を要求しようと結局forwardonlyに調整されます
テーブルやPK等で自動調節?
ならばなぜdynamic要求の場合だけXなのでしょう。動的だから?

Accessのサブフォームのカウント

親フォームに子フォームのレコード数を表示させたい あるいは取得して何かに利用したい
ってことは良くあることと思います。

サブフォームのレコードソースと同じようにレコードセットを取れば取得はできるでしょうけど
フォームでもできるはずだと検索すると
forms!親フォーム!子フォームの名前.form.recorsetclone.recordcount
で出てくるとあるがなぜかだめ
フォームデザインでビルドで入力してもインテリセンスのメンバーにrecordsetもrecordsetcloneも出てこない

VBAで
forms(親フォーム)(子フォーム).form.recordsetclone.recordcount
と書けば取得できるのだが

なぜ?