SQL
カーソルの正しい書き方(DECLARE〜DEALLOCATEのテンプレ)
出典: SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸) — カーソルの正しい書き方(DECLARE〜DEALLOCATEのテンプレ)
-- ✅カーソル基本テンプレ
DECLARE @table_name SYSNAME;
DECLARE @sql NVARCHAR(MAX);
DECLARE meta_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
SELECT name FROM sys.tables WHERE schema_id = SCHEMA_ID('dbo');
OPEN meta_cursor;
FETCH NEXT FROM meta_cursor INTO @table_name;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = N'SELECT ''' + @table_name + N''' AS tbl, COUNT(*)AS cnt FROM dbo.' + QUOTENAME(@table_name);
EXEC sp_executesql @sql;
FETCH NEXT FROM meta_cursor INTO @table_name;
END;
CLOSE meta_cursor;
DEALLOCATE meta_cursor;
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「カーソルの正しい書き方(DECLARE〜DEALLOCATEのテンプレ)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
6 件-- ❌アンチパターン:カーソルで1行ずつUPDATE DECLARE @id INT, @flag CHAR(1); DECLARE c CURSOR FOR SELECT id, flag FROM target_table WHERE status = 0; OPEN c;未収録
1.一括UPDATE / INSERT
#2a730dcef025
-- ❌カーソル+変数累積 DECLARE @total DECIMAL(18,2)= 0; -- ...カーソル省略... SET @total = @total + @amount;
▶ 実行可
2.集計(SUM / COUNT / AVG)
#003642727eff
-- ✅ウィンドウ関数で一発 SELECT customer_id, purchase_date,
▶ 実行可
3.ランキング(ROW_NUMBER / RANK)
#26525d4eb78c
-- ✅ CASE WHEN一発 UPDATE customer_master SET grade = CASE WHEN total_amount >= 1000000 THEN 'A'未収録
5.条件分岐UPDATE
#dae92f20fbdd
-- ❌重いデフォルト(GLOBAL / KEYSET /更新可能) DECLARE c CURSOR FOR SELECT id FROM big_table; -- ✅軽量カーソル(LOCAL / FAST_FORWARD / READ_ONLY)未収録
性能落とし穴— FAST_FORWARD READ_ONLY LOCALの意味
#4a5ae3f957e0
// ✅ C#側でループする(DataReader版) using (var conn = new SqlConnection(_connectionString)) using (var cmd = new SqlCommand("SELECT id, name FROM target_table WHERE status = 0", conn)) {未収録
C#側との連携— DataReaderでクライアント側ループに寄せる選択肢
#adcfd19ba723
