Microsoft SQL Server
なにかと便利になってきたデータベース。
サーバ
クライアント
■エディションと機能
版 | 最大メモリ | 最大利用可能コア | データベースサイズ | Management Studio | 全文検索 | Reporting Services | Reporting Services (SharePoint連携) |
Express | 1GB | 1cpu/4coreまで | 10GB | × | × | × | × |
Express with Tools | 1GB | 1cpu/4coreまで | 10GB | ○ | × | × | × |
Express with Advanced Services | 1GB | 1cpu/4coreまで | 10GB | ○ | ○ | ○ | × |
Standard | 64GB | 4cpu/16coreまで | ほぼ無制限 | ○ | ○ | ○ | ○ |
■phpでバイナリ―データを扱う
データ登録
$i=1;
$f="imagefile.png";
$dsn = "sqlsrv:server=localhost\express;database=ChEMBL_13";
$dbh=new PDO($dsn,'foo','bar');
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $dbh->prepare("INSERT into IMAGETBL(ID, snapshot) values ( ?, ?)");
$fp = fopen($f,'rb');
$sth->bindParam(1, $id, PDO::PARAM_INT);
$sth->bindParam(2, $fp, PDO::PARAM_LOB,0,PDO::SQLSRV_ENCODING_BINARY );
$dbh->beginTransaction();
$sth->execute();
$dbh->commit();
データ参照
$dsn = "sqlsrv:server=localhost\express;database=ChEMBL_13";
$dbh=new PDO($dsn,'foo','bar');
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth=$dbh->prepare("SELECT snapshot FROM IMAGETBL where ID=1");
$sth->execute();
$sth->bindColumn(1,$image,PDO::PARAM_LOB,0, PDO::SQLSRV_ENCODING_BINARY);
$sth->fetch(PDO::FETCH_BOUND);
file_put_contents("imagefile.png",$image);
小ネタ
■連番を振る
UPDATE table_a
SET table_a.ID=tmp.idx
FROM (
SELECT table_a.ID,table_a.MOL, ROW_NUMBER() OVER (ORDER BY table_a.ID,table_a.MOL) AS idx
FROM table_a
) AS tmp
WHERE
table_a.ID=tmp.ID AND table_a.MOL=tmp.MOL
■縦に複数のデータを横並びで取得したい
https://webbibouroku.com/Blog/Article/forxmlpath