Microsoft SQL Server

SQL Server : SQL

2023.02.23 結合した列を条件にする

列同士を結合して、検索条件を記述することができる。
SELECT * FROM TABLE_A WHERE CONVERT(NVARCHAR,COL_1)+COL_2='11112222'

以下の SQL と同じ意味。
SELECT * FROM TABLE_A WHERE COL_1=1111 AND COL_2='2222'

2023.02.17 列名を変更する

列 COL_1 の名前を COL_2 に変更します。

EXEC sp_rename 'dbo.TABLE_1.COL_1', 'COL_2', 'COLUMN';

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

テーブル TABLE_1 に 列 COL_1 が存在しないとき、列 COL_1 を追加します。

IIF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = N'{nameof(COL_1)}' AND Object_ID = OBJECT_ID(N'TABLE_1'))
ALTER TABLE TABLE_1 ADD COL_1 NVARCHAR(250) DEFAULT '' NOT NULL

2022.06.05 SQL SERVER のバージョンを取得

SQL SERVER のバージョンを取得します。

SELECT @@VERSION

2022.05.31 固定桁コードの作成

コードを固定桁で出力します。次の例はコード列 (COL_A) を 4桁で出力します。

SELECT RIGHT('0000' + COL_A, 4) FROM TBL_A

テーブルを更新するには、次の SQL を発行します。

UPDATE TBL_A SET COL_A = RIGHT('0000' + COL_A, 4)

2022.05.02 null データの削除

特定の列が null のデータを削除するには is を使用します。= ではありません。

delete from TBL_A where COL_A is null

2022.04.27 非クラスター化インデックスの作成

非クラスター化インデックスを作成するには、次の SQL を実行します。

CREATE NONCLUSTERED INDEX [IDX_TBL_A] ON [dbo].TBL_A (COL_A, COL_B)

2022.04.17 タブ文字の検索

タブ文字 (\t) が含まれている文字列データを検出する SQL を作成しました。

select * from TBL_A
where COL_A like '%' + char(9) + '%'

重複レコードの id を取得

SQL Server データベースのあるテーブル中にキーが重複したレコードが存在することが判明しました。削除するためには、そのレコードの id が判明すると作業が容易です。そこで次のような SQL を作ってみました。

SELECT * FROM TBL_A WHERE (COL_A + CONVERT(NVARCHAR,COL_B)) IN (
SELECT COL_A + CONVERT(NVARCHAR, COL_B) FROM TBL_A
GROUP BY COL_A, COL_B
HAVING COUNT(*) > 1)
ORDER BY COL_A + CONVERT(NVARCHAR,COL_B)

ポイントは、SQL Server で、WHERE ~ IN を書く際、複数列の比較ができないことです。そこで一つの列になるよう 2 つの列を結合して、1 つにしました。今回は Date 型の列も含まれていたため、NVARCHAR がたに変換して結合しました。

-Microsoft SQL Server