TechBox

業務で使えそうな技術を紹介します。

【SQLServer】よく使うクエリ集

SQLServerの便利なクエリをメモしておきます。

ここでは簡単なサンプルを紹介しています。
自由に応用して使ってみてください。

全般

テーブルが存在していればテーブルを削除(IF EXISTS)

-- その①
IF object_id(N'テーブル名') IS NOT NULL
    DROP TABLE テーブル名;

--その②
DROP TABLE IF EXISTS テーブル名;

DBのプロセスを強制中断(KILL)

USE master
Go
Declare @dbname sysname
Set @dbname = 'データベース名'
Declare @spid int
Select @spid = MIN(spid) from master.dbo.sysprocesses
where dbid = DB_ID(@dbname)
while @spid is Not Null
Begin
     Execute('kill ' + @spid)
     Select @spid = MIN(spid) from master.dbo.sysprocesses
     where dbid = DB_ID(@dbname) and spid > @spid
End

AとBテーブルを結合してテーブルAを更新(JOIN UPDATE)

UPDATE テーブルA SET
テーブルAの更新対象カラム = b.参照カラム
FROM テーブルA AS a
INNER JOIN テーブルB AS b ON a.キー = b.キー

重複データの抽出(HAVING)

SELECT * FROM テーブルA a
WHERE EXISTS
(SELECT * FROM テーブルA WHERE a.対象カラム=対象カラム GROUP BY 対象カラム HAVING COUNT(*)>1)

CSVからインポート(BULK INSERT)

BULK INSERT Students
FROM 'CSVのファイルパス'
WITH
(
   FIELDTERMINATOR = ',',
   ROWTERMINATOR = '\n'
);
--あらかじめテーブルの作成が必要。カラムの順番も合わせる必要があります。

連番を生成&○○ケタの番号を生成(ROW_NUMBER)

 SELECT 
    RIGHT('100' + convert(varchar,1000 + ROW_NUMBER() OVER (ORDER BY カラム名)), 4) AS NewNo
 FROM テーブルA

データベース系

データベースの削除(DROP DATABASE)

EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'データベース名'
GO
USE [master]
GO
DROP DATABASE [データベース名]
GO

データベースのバックアップ(BACKUP DATABASE)

BACKUP DATABASE [データベース名] TO  DISK = N'D:\保存先パス\backup.bak'
WITH NOFORMAT, INIT,  NAME = N'完全 データベース バックアップ',
SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

データベースのリストア(RESTORE DATABASE)

--※1.あらかじめDBへの接続プロセスがあると削除できない可能性があります。事前にKILLしておく必要があるかもしれません
--※2.同一の名前のデータベース名があるとリストアできません。同じデータベースがある場合は事前に削除しておく必要があります
USE [master]
RESTORE DATABASE [データベース名] FROM DISK = N'D:\保存先パス\backup.bak'
WITH  FILE = 1,  NOUNLOAD,  STATS = 5
GO

カラム系

カラムの追加

ALTER TABLE テーブル名 ADD カラム名 nvarchar(4) NULL

カラムの追加をする場合は一番後ろにカラムが追加されます。
MySQLのように、カラム追加する位置を指定して追加する(AFTER)ことはできないでようです。
カラムの位置は追加後に手動で位置調整するか、もしくはテーブルを作り直す方がよいです。

カラムの変更

ALTER TABLE テーブル名 ALTER TABLE カラム名 nvarchar(4) NULL

カラムの削除

ALTER TABLE テーブル名 DROP COLUMN カラム名

カラム名変更

EXEC sp_rename 'テーブル名.現在のカラム名','変更するカラム名','COLUMN'