#author("2021-05-19T00:54:03+00:00","default:admin","admin")
#author("2021-08-25T03:58:43+00:00","default:admin","admin")
-テーブルの特定の位置にカラムを追加する ... SQL Serverではできない!ダサッ!
--[[SQL ServerのT-SQLでテーブルの特定の位置にカラム (列、項目) を追加する:https://urashita.com/archives/13652]]
--SQL Management Studioでやるしかない

*実行SQL [#v2885d29]
-[[sys.dm_exec_sql_text (Transact-SQL):https://docs.microsoft.com/ja-jp/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sql-text-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15]]
-[[sys.dm_exec_query_stats (Transact-SQL):https://docs.microsoft.com/ja-jp/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-query-stats-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15]]

-[[現在実行中のSQLを調べる:https://haradago.hatenadiary.org/entry/20130325/p1]]
-[[SQL Server で実行された SQL を SQL で取得する方法:https://www.projectgroup.info/tips/SQLServer/MSSQL_00000042.html]]

-現在実行中のSQLを表示
 select	sql.text as クエリ, 
 	db.name as DB,
 	req.session_id,
 	req.status, 
 	req.command, 
 	(req.total_elapsed_time/1000) as 経過時間_秒,
 	req.start_time as 処理開始日時
 from sys.dm_exec_requests req cross apply sys.dm_exec_sql_text(req.sql_handle) sql,
      sys.databases db 
 where db.database_id = req.database_id

-指定日時以降に実行されたSQLを表示
 SELECT st.text
       ,last_execution_time
 FROM   sys.dm_exec_query_stats qs
 CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
 WHERE  last_execution_time >= '2020/03/12 12:00:00'
 ORDER BY last_execution_time

-CPU の平均時間で順位付けされた上位5つのクエリに関する情報
 SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],  
     SUBSTRING(st.text, (qs.statement_start_offset/2)+1,   
         ((CASE qs.statement_end_offset  
           WHEN -1 THEN DATALENGTH(st.text)  
          ELSE qs.statement_end_offset  
          END - qs.statement_start_offset)/2) + 1) AS statement_text  
 FROM sys.dm_exec_query_stats AS qs  
 CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
 ORDER BY total_worker_time/execution_count DESC; 

*テーブル有無 [#h2795c39]
-[[【SQL Server】テーブルの存在チェックするやり方を解説します:https://www.tairax.com/entry/Microsoft-SQL-Server/Check-existence-of-table]]

 IF OBJECT_ID (N'テーブル名', N'U') IS NOT NULL  
 	「テーブルが見つかったときの処理」
 ELSE
 	「テーブルが見つからなかったときの処理」

-OBJECT_ID関数に指定する引数は
--第一引数:オブジェクト名
--第二引数:オブジェクトタイプ
-第二引数に【N'U'】を指定する理由は、【N'U'】がテーブルのオブジェクトタイプのため

*クエリタイムアウト [#l7b594bf]
-[[SQL Serverで断続的に発生するクエリタイムアウトの原因を調査した話:https://techblog.zozo.com/entry/sqlserver-query-timeout]]

*Tips [#ka23c672]
-[[複数の列で in 句を使いたい:https://odashinsuke.hatenablog.com/entry/2015/12/13/103651]]

**変数 [#ca325574]
-[[SQL Server: 変数にSELECTした結果を代入する方法:https://ameblo.jp/hiro628/entry-11025756474.html]]
-[[sql-server – クエリ結果を変数に格納し、それをストアドプロシージャ内で変更する:https://codeday.me/jp/qa/20190301/293218.html]]

-[[SELECT した結果をカーソルを使用してループ処理をする方法:https://www.projectgroup.info/tips/SQLServer/SQL/SQL000028.html]]


**SQL [#e8512fe6]
***データコピー [#e56be143]
 insert [コピー先DB].dbo.[テーブル名]
   select [コピー元DB].dbo.[テーブル名]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS