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 がたに変換して結合しました。