selectした結果をinsert

これもその度に検索しますがもういい加減に覚えたい
selectした結果をinsert

tableBからselectしてtableAへ

insert into TableA(column1,column2,column3)
select カラム1,カラム2,カラム3 from tableB
where 条件;

SQL ServerでもFormat(日付,’***’) VBAで四捨五入もできるFormat()

たしかconvert使って’111’みたいな・・
そんなの覚えられません。使うときは検索 
と諦めてましたが
vbaと同様Format(getdate(),’yyyymmdd’)とかできるらしい
戻り値は文字ですけど

そしてVBAにはISO丸めはあっても四捨五入する関数はないと思っていたら

format(2.36,”0.0″) は 2.4 と四捨五入してくれるらしい

ただし 2.4は文字型 です

UTF-8 bom エディタ

今日、仕事中にMySQLのダンプファイルを開く必要に迫られた。
一部の手直しなので復旧させずに一部のテキストをコピーした方が早いのだが
適当なエディタがない。
300M を超える容量でOPEN OFFICE で開けるがちょっと重たい
TeraPadでは開けない
windowsのメモ帳の折り返しをしなければサクサク動くが
メモ帳はBOM付きUTF8でないと文字化け

BOMなし、BOM付き 両方読めて巨大ファイルも開けるエディタは・・
そんなの準備する時間もないので慌てましたが
NonCodeNetという変換ツールがありました。

between 日付 and 日付

betweenは演算子

あまり考えた事なかったけど
between ‘2017/1/1’ and ‘2017/2/1’ の場合
>=’2017/1/1 00:00:00’ かつ <='2017/2/1 00:00:00'    MySQLで確認、ほかも同じでしょう

SSMSでテーブル変更

はオプション変更すればGUIで可能だが非推奨らしい。
ではどうすれば良いかというと「クエリを発行しなさい」
らしい

alter table 滅多に使いませんからメモです。
結局変更の履歴を記録したいという事かな。
かなり面倒くさい。やるかやらぬか別にしてとりあえず・・

注 SSMS=SQL Server Management Studio

・表に列を追加する

ALTER TABLE テーブル名 ADD

列名1 VARCHAR (10) DEFAULT ” NOT NULL

,列名2 VARCHAR (10) DEFAULT ” NOT NULL

・表の列定義を変更する

ALTER TABLE テーブル名 ALTER COLUMN 変更する列名 データ型

例:ALTER TABLE TABLE_A ALTER COLUMN COLUMN_1 VARCHAR(200)

・表の列を削除する

ALTER TABLE テーブル名 DROP COLUMN

列名1,列名2

・表の名前を変更する

EXEC sp_rename ‘現在のテーブル名’,’変更するテーブル名’,’OBJECT’
・表の列名を変更する

EXEC sp_rename ‘テーブル名.現在の列名’,’変更する列名’,’COLUMN’

http://www.projectgroup.info/tips/SQLServer/SQL/SQL000005.html

access2016のバージョンを戻す

頻繁にバージョンが更新されますがバグは改善されませんので古いバージョンに戻します。
cmd.exeで
C:\Program Files\Common Files\microsoft shared\ClickToRun>officec2rclient.exe /update user updatetoversion=16.0.8201.2102

8201.2102がバージョン
バージョンは
https://support.microsoft.com/ja-jp/help/2770432/how-to-revert-to-an-earlier-version-of-office-2013-or-office-2016-clic
で調べる

サロゲートペア文字

フロントエンドAccess2016バックエンドmysql5.7の
DBアプリで「通称つちよし」という漢字を入力保存するとフリーズ
はて?何年か前もそういう漢字に遭遇したような・・
mysqlはuft8でだいたいの環境依存文字は問題ないはず。
Google先生に聞いてみると
土の下に口、で通称つちよし サロゲートペア文字というらしい
一文字で4バイトあり、スマホの絵文字と同じ。
つまり絵文字が入らないならこの字も入らない。
uft8は3バイト文字までしか格納できない。
uft8mb4にすれば良いらしい。
mysqlの文字コード、参照を変更
テーブルも変更して入力すると・・エラー
コンソールからinsertすると文字表示はできないけど
query OK 
でもAccessからは入力できない。

そういえば検索してもうまくいってるのはweb系ばかり
ということはODBC周りが変換できないのかな?

どうしてもできないのでサロゲート文字をトラップしたら
2バイトずつコード化してmysqlに格納
Accessにはコードで持ってきて変換することにした。

サロゲートペア文字のコードは2バイトずつ
上の句、下の句で構成されていて
それぞれサロゲートという領域のコードらしい。
2日ほど悩んでました。

この掲示板も表示できない

Accessのバグ

もう一つ書いておきます
7月のOffice updateでフォームなどのテキストボックスで
反転と実際の文字選択がずれるというバグ
こんなひどいバグすぐ修正されるだろうと思ったらまだ放置
Accessのバグはよく放置されます。
VB.NET移行も考えようかなあ 

mysqlのdescribe SQLServerでは?

mysqlのdescribe = SQLServerのsp_help

sp_help ‘テーブル名’

だけどSQLServerはSQLServer Management Studioという優秀な
管理ツールがあるので起動させて構造とか見た方が早い
最初はsqlcmd起動させてmysql の\Gはどうすれば?goは面倒くさいとか思ったけれど
Management Studio の使い方を覚えれば苦にならない

コンソールはmysqlが使いやすいが官製管理ツールはSQLServerの勝ちで痛み分けかな

SQLserver とクライアントとODBC

ACCESSフロントエンド SQLserverバックエンドDBでDBアプリが開発できんかなあと奮闘中
形だけ整ってきたのでアプリが膨れ上がる前にローカルで開発したものをクライアントでも
動かすと・・
まず戸惑ったのがODBC 
SQL Server ODBC,ODBC Driver 13 for SQLserver,SQL server native client 
3択になってる?
Mysqlは少しだけかじったけど一択なんだけど・・
調べると再頒布ならSQL server native clientが良さげとGoogle先生がおっしゃるが
なぜか競合エラー 他のユーザーが同時に更新を・・で挫折
やむなく、とりあえず、SQL serverを選択 こちらでは何故か起きない
windows認証でSQLserverログインの場合
どのコネクターでもキモはクライアントのユーザーをSQL serverの
ローカルユーザーに同じ名前とPWで登録してかつSQL serverにも
登録して権限を与える。なんか矛盾してるような気もするが
これでクライアントからも接続できた。
accdeならコネクターの名前は開発元と同じ名前にする。これもキモ。

SQL server native clientは宿題とする

しかしOSは64bitだけどACCESSが32bitなのでコネクターも32ビット
なんですよね。
VBAでクエリ文書いているときも今ACCESS側のクエリなのか
SQL側のクエリなのかも時々混乱します。
まるで北斗琉拳の魔闘気の中にいるように自分の立ち位置がわからなくなります。
暗琉天破、受けたことはないですが・・。