動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About

動くコード図鑑

$ ls -1 /library | wc -l → 619

触って動く、検証済みの正解集。

公開記事から抽出した全コードブロックを 1 つずつページ化。 ▶ ボタンで 実行ログを再生し、 さも今動いてるかのように出力を流す。

この図鑑の使い方

言語で絞る

C# / SQL / TypeScript / PowerShell / Bash でフィルタ。

▶ で実行

事前収録の出力を 1 行ずつ再生。 ぱっと結果が見える。

記事と接続

各 snippet は出典記事へのリンク付き。 文脈ごと読める。

絞り込み

snippet 一覧

619
C#
namespace sqlserver_connection_demo.Models
{
    public class User
    {
        public int ID { get; set; }

Modelを作る

【C#】Asp.net Core EFでSqlServerに対しマイグレーションをする方法未収録#89e3af841026
C#
using Microsoft.EntityFrameworkCore;

namespace sqlserver_connection_demo.Models
{
    public class DemoContext : DbContext

Contextを作る

【C#】Asp.net Core EFでSqlServerに対しマイグレーションをする方法未収録#79dce8b7ef74
C#
namespace sqlserver_connection_demo
{
    public class Startup
    {
        public Startup(IConfiguration configuration)

Start.csを修正する

【C#】Asp.net Core EFでSqlServerに対しマイグレーションをする方法未収録#ec0b6d60debc
C#
        private SqlConnectionStringBuilder stringBuilder = new SqlConnectionStringBuilder()
        {
            InitialCatalog = "DemoDB",
            DataSource = "localhost",
            UserID = "sa",

Start.csを修正する

【C#】Asp.net Core EFでSqlServerに対しマイグレーションをする方法未収録#8e195404d5da
C#
            services.AddDbContext<DemoContext>(opt =>
            {
                opt.UseSqlServer(stringBuilder.ToString());
            });

Start.csを修正する

【C#】Asp.net Core EFでSqlServerに対しマイグレーションをする方法未収録#16ca3ab0fab2
C#
        private DataTable getDataTable()
        {
            var dt = new DataTable();
            var idCol = dt.Columns.Add("ID");
            var nameCol = dt.Columns.Add("氏名");

DataTableの定義

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#a4a95e25ff1d
C#
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = getDataTable();
        }

DataGridViewのDataSourceに反映させる

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#90454beb1e12
C#
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = getDataTable();

        // 列名を自由に変更する。

余談1:列名を変更したいならColumnNameのプロパティを触る

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#e971cd5ead3c
C#
    public class User
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

余談2:CustomClassもDataSourceにできます

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#ab4b87efdb29
C#
        private IEnumerable<User> GetUsers()
        {
            var user1 = new User(1, "鈴木 おさむ",22, "東京都世田谷区");
            var user2 = new User(2, "高橋 つよし",25, "東京都葛飾区");

余談2:CustomClassもDataSourceにできます

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#5c9fd7e063bb
C#
        private void Form1_Load(object sender, EventArgs e)
        {
            //dataGridView1.DataSource = getDataTable();

        //// 列名を自由に変更する。

余談2:CustomClassもDataSourceにできます

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#9e611e145e57
C#
        private void button1_Click(object sender, EventArgs e)
        {
            var data = (DataTable)dataGridView1.DataSource;
            dataGridView2.DataSource = data;
        }

DataGridViewをDataTableに変換して取得するには?

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#1d1e363b3ea6
C#
        private void button1_Click(object sender, EventArgs e)
        {
            var data = (DataTable)dataGridView1.DataSource;
            var newDt = data.Copy();

このままだと同じインスタンスになってるので、左右で同じ動きになってしまう。

【C#】DataGridViewにDataTable反映したり変換して取得したりする未収録#f5f19b5032c8
SQL
-- 既存行があるテーブルに NOT NULL + 定数デフォルトを足す
CREATE TABLE dbo.受注 (受注ID int PRIMARY KEY, 金額 int);
INSERT INTO dbo.受注 VALUES (1, 1000), (2, 2000);
GO

▶ 実行可

1. NOT NULL + デフォルト値の組み合わせで挙動が割れる

SQL Server で本番テーブルにカラムを追加する時、業務SEが気をつける3つのこと#d2eedd1ebe08
SQL
-- 可変長NULLは即時・既存行のサイズも据え置き(値が入るまで増えない)
ALTER TABLE dbo.受注 ADD 備考 varchar(200) NULL;

-- computed 列は実体を持たず、読むたびに計算される(PERSISTED 指定時を除く)
ALTER TABLE dbo.受注 ADD 税込 AS (金額 * 1.1);
▶ 実行可

3. 可変長・固定長・computed 列で挙動とサイズが変わる

SQL Server で本番テーブルにカラムを追加する時、業務SEが気をつける3つのこと#b63061dcf931
SQL
-- ステップ1: まず NULL 許可で追加(メタデータのみ・ロックは一瞬)
ALTER TABLE dbo.受注 ADD 区分 tinyint NULL;
GO

-- ステップ2: デフォルト相当をバッチで段階的に埋める(大テーブルは分割して)

安全な手順 — 本番を止めずにカラムを足す3ステップ

SQL Server で本番テーブルにカラムを追加する時、業務SEが気をつける3つのこと未収録#1a85261c6347
SQL
declare curデータ cursor local for
select CustomerName,age,address
from customer

カーソルの具体的な構文

SQLServerでのカーソルの使い方と書き方!未収録#0076250abee3
SQL
while(@@fetch_status = 0)
BEGIN

-- ここに特定の処理を書く

カーソルの具体的な構文

SQLServerでのカーソルの使い方と書き方!未収録#804711e32c65
SQL
begin try
    begin transaction

        declare
            @CurName nvarchar(20),

カーソルの具体的な構文

SQLServerでのカーソルの使い方と書き方!未収録#7a18a9b55c22
SQL
-- ❌アンチパターン:カーソルで1行ずつUPDATE
DECLARE @id INT, @flag CHAR(1);
DECLARE c CURSOR FOR SELECT id, flag FROM target_table WHERE status = 0;
OPEN c;
FETCH NEXT FROM c INTO @id, @flag;

1.一括UPDATE / INSERT

SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸)未収録#2a730dcef025
SQL
-- ❌カーソル+変数累積
DECLARE @total DECIMAL(18,2)= 0;
-- ...カーソル省略... SET @total = @total + @amount;

-- ✅ GROUP BY一発
▶ 実行可

2.集計(SUM / COUNT / AVG)

SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸)#003642727eff
SQL
-- ✅ウィンドウ関数で一発
SELECT
    customer_id,
    purchase_date,
    amount,
▶ 実行可

3.ランキング(ROW_NUMBER / RANK)

SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸)#26525d4eb78c
SQL
-- ✅ CASE WHEN一発
UPDATE customer_master
SET grade = CASE
    WHEN total_amount >= 1000000 THEN 'A'
    WHEN total_amount >= 500000  THEN 'B'

5.条件分岐UPDATE

SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸)未収録#dae92f20fbdd
SQL
-- ✅カーソル基本テンプレ
DECLARE @table_name SYSNAME;
DECLARE @sql NVARCHAR(MAX);

DECLARE meta_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
▶ 実行可

カーソルの正しい書き方(DECLARE〜DEALLOCATEのテンプレ)

SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸)#50ab94bf4bc6
SQL
-- ❌重いデフォルト(GLOBAL / KEYSET /更新可能)
DECLARE c CURSOR FOR SELECT id FROM big_table;

-- ✅軽量カーソル(LOCAL / FAST_FORWARD / READ_ONLY)
DECLARE c CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT id FROM big_table;

性能落とし穴— FAST_FORWARD READ_ONLY LOCALの意味

SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸)未収録#4a5ae3f957e0
C#
// ✅ C#側でループする(DataReader版)
using (var conn = new SqlConnection(_connectionString))
using (var cmd = new SqlCommand("SELECT id, name FROM target_table WHERE status = 0", conn))
{
    conn.Open();

C#側との連携— DataReaderでクライアント側ループに寄せる選択肢

SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸)未収録#adcfd19ba723
SQL
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM dbo.tmp_orders WHERE customer_id = 1;
GO
SET SHOWPLAN_TEXT OFF;
▶ 実行可

SET SHOWPLAN_TEXTで実行計画を取る

SQL Server 実行計画の読み方 — Estimated vs Actual で業務SE が最初に見る5箇所#73565946edca
SQL
--準備:通常テーブル+インデックス+ 1万件投入+統計更新
IF OBJECT_ID('dbo.tmp_orders','U')IS NOT NULL DROP TABLE dbo.tmp_orders;
CREATE TABLE dbo.tmp_orders (id INT IDENTITY PRIMARY KEY, customer_id INT, amount INT);
CREATE INDEX IX_customer ON dbo.tmp_orders(customer_id);

▶ 実行可

ハンズオン#1 — Index Seekが出るケース

SQL Server 実行計画の読み方 — Estimated vs Actual で業務SE が最初に見る5箇所#862ed5c3d05c
SQL
|--Nested Loops(Inner Join, OUTER REFERENCES:([id]))
     |--Index Seek(OBJECT:([IX_customer]), SEEK:([customer_id]=(1)))
     |--Clustered Index Seek(OBJECT:([PK__tmp_orders]), SEEK:([id]=[id])LOOKUP)

ハンズオン#1 — Index Seekが出るケース

SQL Server 実行計画の読み方 — Estimated vs Actual で業務SE が最初に見る5箇所未収録#baf135028100
SQL
IF OBJECT_ID('dbo.tmp_products','U')IS NOT NULL DROP TABLE dbo.tmp_products;
CREATE TABLE dbo.tmp_products (id INT IDENTITY PRIMARY KEY, name NVARCHAR(50), price INT);
INSERT INTO dbo.tmp_products (name, price)VALUES
  (N'apple', 100),(N'banana', 200),(N'cherry', 300),(N'durian', 400);

ハンズオン#2 — Clustered Index Scanが出るケース

SQL Server 実行計画の読み方 — Estimated vs Actual で業務SE が最初に見る5箇所未収録#6a3025feb9a9