SSMA for sql server

使い方

①SSMAダウンロード

②Access:SQL Server では実現できない懸念事項の払拭
     ⇒instead of delete トリガーで代替する方法あり

 ・テーブル間の外部キー制約を見直す
 ・DB最適化
 ・データベースの分割

③SSMAでバックエンドaccessファイルを SQL Server へ移行

https://docs.microsoft.com/ja-jp/sql/ssma/access/getting-started-with-sql-server-migration-assistant-for-access-accesstosql?view=sql-server-ver15
https://support.office.com/ja-jp/article/access-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92-sql-server-%E3%81%AB%E7%A7%BB%E8%A1%8C%E3%81%99%E3%82%8B-7bac0438-498a-4f53-b17b-cc22fc42c979

自己結合(同じテーブルを複数回JOIN)

①テーブルTAにテーブルTBを2回ジョイントする場合

エラーとなる:

SELECT * FROM ( TA
LEFT JOIN TB ON ( TA.field1= TB.id ) )
LEFT JOIN TB ON ( TA.field2= TB.code) ;

うまくいく:

SELECT * FROM (TA
LEFT JOIN TB ON TA.[ field1 ] = TB. id )
LEFT JOIN TB as TB_1 on TA.[ field2 ] = TB_1. code

②自分自身のテーブル(TA)を2回ジョイントする

エラーとなる:

SELECT * FROM ( TA
LEFT JOIN TA ON ( TA. code = TA.id)

うまくいく:

SELECT * FROM (TA AS TA1
LEFT JOIN TA AS TA2 ON ( TA1. code = TA2. id )

Anaconda

Anaconda:
Pythonでよく利用されるライブラリを含んだ開発環境
scikit-learnも含まれている

scikit-learn:

pandas:(BSDライセンス)
    Pythonにおいて、データ解析を支援する機能を提供するライブラリである。
    特に、数表および時系列データを操作するためのデータ構造と演算を提供する

SQL Server のユーザー定義関数(スカラー値関数)確認

生成したユーザー定義関数は、SQL Server Management Studio の
プログラミング > 関数 > テーブル値関数 ・スカラー値関数の箇所で見つけることができます。

ユーザー定義関数の作成
・スカラー関数 (スカラー UDF)         ⇒RETURNS int
・インライン テーブル値関数 (TVF)       ⇒RETURNS TABLE
・複数ステートメント テーブル値関数 (MSTVF)  ⇒RETURNS @retFindReports TABLE

※ ユーザー定義関数は、データベースの状態を変更するアクションの実行に使用することはできません。

※ 出力先がテーブルである OUTPUT INTO 句をユーザー定義関数に含めることはできません。

※ SET ステートメントはユーザー定義関数では使用できません。

※ FOR XML 句は使用できません。

※ ユーザー定義関数はストアド プロシージャを呼び出すことができませんが、拡張ストアド プロシージャを呼び出すことはできます。

※ エラー処理は、ユーザー定義の関数では制限されます。
  UDF では TRY…CATCH、@ERROR、RAISERROR はいずれもサポートされません。

※ ユーザー定義関数は入れ子にすることができます。
  32 レベルまで入れ子にすることができます。

https://sql55.com/t-sql/t-sql-alter-drop-user-defined-function.php
https://docs.microsoft.com/ja-jp/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine?view=sql-server-ver15

型文字(0♯)-VB-

♯記号などは、「リテラル」というもので型を
暗黙に示すもので、#はDouble型を示す。

Dim i as Double と宣言すれば i はDouble型に決まって
いますので♯は要らないが、
稀に Dim i as Variant(何でも型)と宣言したとき、i=1#とすると
Double型として明示代入ができる。
とはいえ、変数の中身が訳がわからなくなるので、こんな書き方は
通常はしない。プログラム文中を判りやすく見せているだけ。

<参照> 
型文字 (Visual Basic)

識別子の型文字 データの種類 例
% Integer Dim L%
& Long Dim M&
@ Decimal Const W@ = 37.5
! Single Dim Q!

# Double Dim X
$ String Dim V$ = “Secret”

https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/data-types/type-characters

ステータスバーに進捗状況等の情報を表示させる(Applicationオブジェクト、SysCmd メソッド)

<Excel VBA>
Application.StatusBar = “こんな感じで表示されます。”

<Access VBA>
Application.CommandBars(“Status Bar”).Visible = True ‘ ステータスバーを表示する。
Application.CommandBars(“Status Bar”).Visible = False ‘ ステータスバーを非表示にする。
SysCmd メソッド

【表示文字列+インジケータを表示】

・Access画面の右下に指定した表示文字列+インジケータを表示してくれます。
SysCmd acSysCmdInitMeter, “表示文字列”, 最大値

・指定された値でインジケータの進捗具合を更新します。
SysCmd acSysCmdUpdateMeter, 最大値を超えない任意の値

・インジケータが不要になったら、消去させます。
SysCmd acSysCmdClearStatus

※進捗状況は、acSysCmdUpdateMeter で指定した値を使って
インジケーターに表示する割合を計算して再表示してくれます。
例えば、最大値が 100 のときに 50 を指定すると、インジケーターが半分まで進みます。
最大値を超えた値を指定するとインジケータが正しく表示されません。
※複数回呼び出し可です。

【インジケータは、不要で文字列だけ表示させたい場合】

・Access画面のステータスバーに表示を行う
SysCmd acSysCmdSetStatus , 表示する文字列

・ステータスバーの表示の消去
SysCmd acSysCmdSetStatus , “ ”
   または、
    SysCmd acSysCmdClearStatus

※指定できる文字数は、いずれも約 80 文字です。
表示する文字がステータスバーよりも長いと、
SysCmd メソッドはステータスバーに収まるように文字を切り捨てます。

https://docs.microsoft.com/ja-jp/office/vba/api/access.application
https://docs.microsoft.com/ja-jp/office/vba/api/access.application.syscmd
https://www.hiskip.com/technique/vba/accessvba/974.html

砂時計の表示(Hourglass メソッド)


(1)マウスポインタの形状を砂時計にする
 DoCmd.Hourglass True/False
 
(2)いろいろな形状
 Screen.MousePointer = 値

【 値 】
0:規定値
1:矢印
3:I字型
7:上下の矢印
9:左右の矢印
11:砂時計

※これ以外の値を指定した場合は、規定値と同じ。

マウスポインタの形状を砂時計にする
DoCmd.Hourglass True
マウスポインタの形状を標準に戻す
DoCmd.Hourglass False
マウスポインタの形状を「I字型」に変える
Screen.MousePointer = 3
マウスポインタの形状を標準に戻す
Screen.MousePointer = 0

https://docs.microsoft.com/ja-jp/office/vba/api/access.docmd.hourglass
http://www.mtanabe.com/tips.php?tips_id=70

配列の初期化(ReDim、Preserve、Array、Erase)

可変長配列の場合

①はじめは、 

    Dim 配列名() As データ型名

②後から要素数や次元数を宣言

    ReDim 配列名(添字の上限値, ・・・)

配列を初期化する方法

①Eraseを使って初期化する

    Erase 配列名

※この場合、配列のデータ型によって初期値が異なる。
    
    ・数値配列:0(ゼロ)
・文字列配列:長さ0(ゼロ)の文字列
・オブジェクト配列:Nothing
・バリアント配列:Empty

②Arrayを使って初期化する

    Dim 配列名() As Variant
配列名 = Array(要素(0), 要素(1), ・・・)

配列を解放(再初期化)する方法

ReDim 配列名

配列の要素数を変更する方法

ReDim Preserve 配列名

1次元から2次元配列に変更する場合

Dim arr(3) As Integer
      ↓↓↓
    ReDim arr(3, 3)


SSMS で設定されているすべてのトリガーを表示するスクリプト

SSMS で設定されているすべてのトリガーを表示するスクリプト

SELECT sys.triggers.name ,sys.sql_modules.definition
FROM sys.triggers
INNER JOIN sys.objects
ON sys.objects.object_id = sys.triggers.object_id
INNER JOIN sys.schemas
ON sys.schemas.schema_id = sys.objects.schema_id
INNER JOIN sys.sql_modules
ON sys.sql_modules.object_id = sys.objects.object_id
ORDER BY sys.triggers.name

※SSMS はデフォルトで256文字までしか出力できないため、クエリーのオプションで8000に変更してから出力