14
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQL Serverチートシート

Last updated at Posted at 2018-08-04

SQL Server(RDB)に使うtransact SQLの私的チートシート。
逐次増やしていきます。

##テーブル操作関係

###テーブルを作る

CREATE TABLE test_table (
   [id] int not null primary key,
   [name] nvarchar(50) not null
);

###テーブルを作る(先頭列idを自動インクリメント行にする)
GUIで編集していると気づきにくいですが、自動インクリメント(identity insert)の設定ができるのは、テーブル作成時と行追加時のみです。

CREATE TABLE mw_log (
   id int identity not null primary key ,
   name nvarchar(50) not null
);

###テーブルに行を追加する

INSERT INTO mw_log (id,name)
values (2,'ボルシチ')

###テーブルに列を追加する

ALTER TABLE mw_log add [updatedate] datetime not null default getDate();

###テーブルを削除する

DROP TABLE mw_log

###テーブルに複数項目からなるの主キーを設定する
テーブル作成時には、複数の項目からなる主キー制約を設定できないので、テーブルを作った後に設定します。
主キーは自動的にクラスタ化インデックスになるので、例示のCLUSTEREDはなくても動きます。

CREATE table mw_log_detail
(id int not null,
 UpdateDate datetime not null);

 ALTER table mw_log_detail
 ADD CONSTRAINT pk_mw_log_dtail
 PRIMARY KEY CLUSTERED (id,UpdateDate);

##データベースの情報を取得する

###データベースのテーブル一覧を取得する

SELECT * FROM INFORMATION_SCHEMA.tables

###データベースのカラムの一覧を取得する

SELECT * FROM INFORMATION_SCHEMA.columns

データベースの容量を減らしたい時に

プレゼンやデモ、説明会用にデータベースの容量を少なくしたい時に。

インデックスを削除してDBの容量を節約する。

DROP INDEX index_hogehoge on table_name_hoge

プレゼンやデモ、説明会用にデータベースの容量を少なくしたい時に。

SELECT
    o.name AS [tabele_name]
    i.name as [index_name]
 FROM sysindexes i
 INNER JOIN sys.objects o 
        ON o.object_id = i.id
 WHERE i.name like 'INDEX_%'

データベースのテーブルの中身を全削除するSQL文を作る。

注意:生成したSQLの実行時は外部キー制約を一時的に外すなどの工夫が必要です。

SELECT 'TRUNCATE TABLE ' + table_name FROM INFORMATION_SCHEMA.tables WHERE table_type='BASE TABLE'

##データベースが遅くなった時の対処

###統計情報の更新(DB全体)

exec sp_updatestats

###統計情報の更新(指名)

UPDATE STATISTICS dbo.hogetable hogeindex

統計情報の削除(指名)

DROP STATISTICS duo.hogetable.hogeindex

###プロセスを確認・キルする
急なDBパフォーマンスダウンの時、ロックエスカレーションなどが考えられます。
SSMSの利用状況モニタでGUIでも作業できますが、急ぐ場合はコマンドの方が対処しやすいです。
特にパフォーマンス低下は対処優先になりやすいので、確認方法、注意点をまとめます。

####プロセスの一覧を取得

sp_who

####プロセスをkillする
一応ロールバックするらしい。

kill 621

##ストアドプロシージャの操作

###ストアドプロシージャを作成する

CREATE PROCEDURE select_today_update 
--ここに引数
AS

SELECT  * from mw_log A INNER JOIN
mw_log_detail B ON A.id=B.id
WHERE convert(nvarchar,UpdateDate,112)=convert(nvarchar,getDate(),112)

###ストアドプロシージャを変更する


ALTER PROCEDURE select_today_update 
--ここに引数
AS

SELECT  * from mw_log A INNER JOIN
mw_log_detail B ON A.id=B.id
WHERE convert(nvarchar,UpdateDate,112)=convert(nvarchar,getDate(),112)

###ストアドプロシージャを削除する

DROP PROCEDURE select_today_update 

トリガー操作

トリガーの一覧を取得する

SELECT * FROM sys.triggers

日々のチューニング

あまり利用されていないインデックス順に表示

利用頻度が低いインデックスは削除。 ORDER BY以下は目的に応じて計算式に係数を入れるなど工夫します。

Use DBName

SELECT 
    o.name As table_name,
    i.name As index_name,
    s.user_seeks,
    s.user_scans,
    s.user_updates
FROM
    sys.objects o INNER JOIN
    sys.indexes i ON o.object_id = i.object_id INNER JOIN
    sys.dm_db_index_usage_stats s ON i.index_id=s.index_id
WHERE
    o.type='U' AND database_id = DB_ID() AND
    s.object_id = OBJECT_ID('table_name')
ORDER BY
    s.user_seeks+s.user_scans+s.user_updates

文字列操作

文字の長さを取得する

SELECT LEN (‘コンニチハ’)
14
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?