1. まとめトップ

この記事は私がまとめました

IQUYOさん

■重複削除

SELECT DISTINCT [項目名] FROM [テーブル名]

■カンマ区切りの文字列からテーブルを生成する

STRING_SPLIT ( [ 文字列 ] , [ 区切り文字 ] )

■WITH句

--副問い合わせ使いまわし(複数の場合はカンマで区切る)
WITH
[withテーブル名1] AS (
 [SELECT文]
),
[withテーブル名2] AS (
 [SELECT文]
)

  ~ 何か処理 ~

SELECT * FROM [withテーブル名1] ←呼び出せる

  ~ 何か処理 ~

SELECT * FROM [withテーブル名1] ←呼び出せる
SELECT * FROM [withテーブル名2] ←呼び出せる
  ~ 何か処理 ~

■カーソル

--カーソルの宣言
DECLARE [カーソル名] cursor FOR [SELECT文]

--カーソルを開く
OPEN [カーソル名]

--FETCH(行の取り出し)
FETCH NEXT FROM [カーソル名] INTO [変数リスト]

  何か処理

FETCH NEXT FROM [カーソル名] INTO [変数リスト]
--LOOP
WHILE (@@fetch_status = 0)
BEGIN

何か処理

--FETCH(行の取り出し)
FETCH NEXT FROM [カーソル名] INTO [変数リスト]

end

--カーソルを閉じる
CLOSE [カーソル名]
DEALLOCATE [カーソル名]

■2つのテーブルを比較して存在しない行をINSERTする

INSERT INTO テーブルA
SELECT *
FROM テーブルB as B
WHERE NOT EXISTS(
SELECT 0
FROM テーブルA as A
WHERE a.key = b.key
)

■テーブルの項目名(列名)

USE DB名(一時ファイルの場合はtempdb)


SELECT
B.column_id
, B.name as 項目名
FROM sys.tables as A inner join sys.columns as B on
A.object_id = B.object_id
WHERE A.name='テーブル名'
ORDER BY B.column_id

■グループ化して文字列を連結する

SELECT
  [項目1],
 STUFF(
   (
  SELECT ', ' + [項目2] FROM [テーブル名]
   WHERE ([項目1]=TableName.[項目1])
  FOR XML PATH('')
   )
  , 1, 1, '') AS NameValues
FROM [テーブル名] AS TableName
GROUP BY [項目1]

[項目1]でグループ化して取得した[項目2]をカンマ(,)で連結
STUFF(1 番目の文字列の指定された開始位置から指定された長さの文字を削除し、次に、2 番目の文字列を 1 番目の文字列の指定された開始位置に挿入します)で最初のカンマ(,)を削除して文字列を連結する

■ いろいろメモ

[改行コード] CRLF char(13) + char(10)
[改行コード] LF  char(10)

[数値の桁区切り]REPLACE(CONVERT(nvarchar,CONVERT(money, expression), 1), '.00', '')

■ 項目列をテーブルに追加

ALTER TABLE [テーブル名]
ADD [項目名] [データ型]
DEFAULT [デフォルト値]

列は最後に追加される。

■ 乱数

■ メール送信

Database Mail を有効にし、プロフィールを設定する。

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'プロフィール名',
@recipients = '送信先アドレス',
@copy_recipients = 'CCアドレス'
@blind_copy_recipients = 'BCCアドレス'
@subject = 'メールタイトル',
@body = N'本文'

@file_attachments = '絶対パスで指定'

添付ファイル(1MB以内)

@query = 'SQLクエリ',
@attach_query_result_as_file = 1

クエリの結果をテキストで添付

■ リンクサーバの情報を取得する

sp_tables_ex [ @table_server = ] 'table_server'
[ , [ @table_name = ] 'table_name' ]
[ , [ @table_schema = ] 'table_schema' ]
[ , [ @table_catalog = ] 'table_catalog' ]
[ , [ @table_type = ] 'table_type' ]
[ , [@fUsePattern = ] 'fUsePattern' ]

■ トランザクションログを削除する

・右クリック→タスク→バックアップ→ログのバックアップを行う

・ログファイルの<name>とファイルサイズを指定して、ログを圧縮。

DBCC SHRINKFILE(<name>, 10000)
GO

論理名の確認方法
USE <データベース名>
SELECT * FROM sys.database_files
(nameカラムが<name>)


・ファイルサイズの上限を設定
右クリック→プロパティ→ファイル→自動拡張で上限を設定する。


※ログの削除※
BACKUP LOG <DBname> TO DISK = N'NUL'

1 2