tag:github.com,2008:https://github.com/brianluft/sqlnotebook/releasesRelease notes from sqlnotebook2025-06-09T08:01:17Ztag:github.com,2008:Repository/52743252/v2.0.02025-06-09T09:22:07ZVersion 2.0.0<h3>⭐<a href="https://github.com/brianluft/sqlnotebook/releases/download/v2.0.0/SqlNotebook-64bit-2.0.0.msi">Download the 64-bit installer (recommended)</a>⭐</h3>
<p>Or: <a href="https://github.com/brianluft/sqlnotebook/releases/download/v2.0.0/SqlNotebook-64bit-2.0.0.zip">Download the 64-bit portable zip</a> • <a href="https://community.chocolatey.org/packages/sqlnotebook" rel="nofollow">Install using Chocolatey</a></p>
<p>Requires Windows 10 or newer on a 64-bit computer. Going forward, 32-bit systems and Windows 7 and 8 are no longer supported. Users of older machines may continue to use version 1.2.3 which should work indefinitely.</p>
<h2>Changes</h2>
<h3>🔄 FOREACH Loop Statement</h3>
<p>Iterate through table rows with automatic variable assignment:</p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="FOREACH (@id, @name, @email) IN customers
BEGIN
PRINT CONCAT('Customer: ', @name, ' (', @email, ')');
END"><pre>FOREACH (@id, @name, @email) <span class="pl-k">IN</span> customers
<span class="pl-k">BEGIN</span>
PRINT CONCAT(<span class="pl-s"><span class="pl-pds">'</span>Customer: <span class="pl-pds">'</span></span>, @name, <span class="pl-s"><span class="pl-pds">'</span> (<span class="pl-pds">'</span></span>, @email, <span class="pl-s"><span class="pl-pds">'</span>)<span class="pl-pds">'</span></span>);
END</pre></div>
<ul>
<li>Variables are automatically declared and assigned values from each row</li>
<li>Supports BREAK and CONTINUE statements like other loops</li>
<li>Works with tables, views, and subqueries</li>
</ul>
<h3>💻 Command-Line Interface</h3>
<p>Execute SQL Notebook scripts from the command line without opening the GUI:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="SqlNotebookCmd "MyNotebook.sqlnb" "MyScript""><pre>SqlNotebookCmd <span class="pl-s"><span class="pl-pds">"</span>MyNotebook.sqlnb<span class="pl-pds">"</span></span> <span class="pl-s"><span class="pl-pds">"</span>MyScript<span class="pl-pds">"</span></span></pre></div>
<ul>
<li>Perfect for automation, batch processing, and CI/CD pipelines</li>
<li>Outputs results in CSV format</li>
<li>Returns appropriate exit codes for success/failure</li>
</ul>
<h3>📝 Dynamic Script Management</h3>
<p>Create and delete scripts programmatically:</p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="-- Create a new script
CREATE SCRIPT DataCleanup AS '
DELETE FROM temp_table WHERE processed = 1;
PRINT ''Cleanup completed'';
';
-- Execute the script
EXECUTE DataCleanup;
-- Remove the script when no longer needed
DROP SCRIPT DataCleanup;"><pre><span class="pl-c"><span class="pl-c">--</span> Create a new script</span>
CREATE SCRIPT DataCleanup <span class="pl-k">AS</span> <span class="pl-s"><span class="pl-pds">'</span></span>
<span class="pl-s"> DELETE FROM temp_table WHERE processed = 1;</span>
<span class="pl-s"> PRINT <span class="pl-pds">'</span><span class="pl-pds">'</span>Cleanup completed<span class="pl-pds">'</span><span class="pl-pds">'</span>;</span>
<span class="pl-s"><span class="pl-pds">'</span></span>;
<span class="pl-c"><span class="pl-c">--</span> Execute the script</span>
EXECUTE DataCleanup;
<span class="pl-c"><span class="pl-c">--</span> Remove the script when no longer needed</span>
DROP SCRIPT DataCleanup;</pre></div>
<ul>
<li><code>CREATE SCRIPT</code> to add new scripts dynamically</li>
<li><code>DROP SCRIPT</code> and <code>DROP PAGE</code> to remove scripts and pages</li>
<li>Useful for generating reports, temporary procedures, and workflow automation</li>
</ul>
<h3>💾 Save Command</h3>
<p>Save your notebook programmatically from within scripts:</p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="-- Save to current file
SAVE;
-- Save to a specific file
SAVE 'MyBackup.sqlnb';"><pre><span class="pl-c"><span class="pl-c">--</span> Save to current file</span>
SAVE;
<span class="pl-c"><span class="pl-c">--</span> Save to a specific file</span>
SAVE <span class="pl-s"><span class="pl-pds">'</span>MyBackup.sqlnb<span class="pl-pds">'</span></span>;</pre></div>
<ul>
<li>Particularly useful in SqlNotebookCmd for persisting changes</li>
<li>Must be used outside of transactions (use "None (auto-commit)" mode in GUI)</li>
</ul>
<h3>🦆 DuckDB Integration</h3>
<p>Import data from DuckDB files with full UI support:</p>
<ul>
<li>Drag and drop <code>.duckdb</code> files directly into SQL Notebook</li>
<li>Available in Import menu → "From file..."</li>
<li>Support for both copying data and live database connections</li>
</ul>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="-- Copy data from DuckDB
IMPORT DATABASE 'duckdb'
CONNECTION 'Data Source=C:\data\analytics.duckdb'
TABLE sales_data;
-- Create live connection
IMPORT DATABASE 'duckdb'
CONNECTION 'Data Source=C:\data\analytics.duckdb'
TABLE sales_data
OPTIONS (LINK: 1);"><pre><span class="pl-c"><span class="pl-c">--</span> Copy data from DuckDB</span>
IMPORT DATABASE <span class="pl-s"><span class="pl-pds">'</span>duckdb<span class="pl-pds">'</span></span>
CONNECTION <span class="pl-s"><span class="pl-pds">'</span>Data Source=C:<span class="pl-cce">\d</span>ata<span class="pl-cce">\a</span>nalytics.duckdb<span class="pl-pds">'</span></span>
TABLE sales_data;
<span class="pl-c"><span class="pl-c">--</span> Create live connection</span>
IMPORT DATABASE <span class="pl-s"><span class="pl-pds">'</span>duckdb<span class="pl-pds">'</span></span>
CONNECTION <span class="pl-s"><span class="pl-pds">'</span>Data Source=C:<span class="pl-cce">\d</span>ata<span class="pl-cce">\a</span>nalytics.duckdb<span class="pl-pds">'</span></span>
TABLE sales_data
OPTIONS (LINK: <span class="pl-c1">1</span>);</pre></div>
<h3>🗄️ Enhanced SQLite Support</h3>
<p>Expanded SQLite file compatibility:</p>
<ul>
<li>Open SQLite databases (<code>.db</code>, <code>.sqlite</code>, <code>.sqlite3</code>) directly via File → Open</li>
<li>Import SQLite tables using the same interface as other databases</li>
<li>Seamless integration with your existing SQLite workflows</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v1.2.32025-06-09T09:19:54Zv1.2.3<p>Requires Windows 7 or newer.</p>
<p>Windows 7 users: <a href="https://sqlnotebook.com/windows-7.html" rel="nofollow">Service Pack 1 and security update KB3063858</a> are required.</p>
<p><strong>Changes</strong></p>
<ul>
<li>Arm64 computers are now supported. Use the downloads labeled "arm64".</li>
<li>Small joins to remote database tables are now faster.</li>
<li>Updated to <a href="https://www.sqlite.org/releaselog/3_46_0.html" rel="nofollow">SQLite 3.46.0</a>.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v1.2.22024-06-19T05:15:05Zv1.2.2<p>Requires Windows 7 or newer.</p>
<p>Windows 7 users: <a href="https://sqlnotebook.com/windows-7.html" rel="nofollow">Service Pack 1 and security update KB3063858</a> are required.</p>
<p><strong>Changes</strong></p>
<ul>
<li>32-bit Windows is now supported. If you have an older 32-bit computer, use the "32bit" download below.</li>
<li>Updated to <a href="https://www.sqlite.org/releaselog/3_44_0.html" rel="nofollow">SQLite 3.44.0</a>.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v1.2.12023-11-05T18:42:45Zv1.2.1<p>Requires 64-bit Windows 7 or newer.</p>
<p>Windows 7 users: <a href="https://sqlnotebook.com/windows-7.html" rel="nofollow">Service Pack 1 and security update KB2533623</a> are required.</p>
<p><strong>Changes</strong></p>
<ul>
<li>Fixed an error message when saving a notebook in certain situations. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1238227628" data-permission-text="Title is private" data-url="https://github.com/brianluft/sqlnotebook/issues/48" data-hovercard-type="issue" data-hovercard-url="/brianluft/sqlnotebook/issues/48/hovercard" href="https://github.com/brianluft/sqlnotebook/issues/48">#48</a>)</li>
<li>No longer inserts nonprintable control characters when pressing Ctrl+? key combinations. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1443191777" data-permission-text="Title is private" data-url="https://github.com/brianluft/sqlnotebook/issues/52" data-hovercard-type="issue" data-hovercard-url="/brianluft/sqlnotebook/issues/52/hovercard" href="https://github.com/brianluft/sqlnotebook/issues/52">#52</a>)</li>
<li>Fixed an error message when a query result includes a zero-length blob.</li>
<li>Updated to <a href="https://www.sqlite.org/releaselog/3_40_1.html" rel="nofollow">SQLite 3.40.1</a>.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v1.2.02023-01-08T03:13:05Zv1.2.0<p>Requires 64-bit Windows 7 or newer.</p>
<p>Windows 7 users: <a href="https://sqlnotebook.com/windows-7.html" rel="nofollow">Service Pack 1 and security update KB2533623</a> are required.</p>
<p><strong>Changes</strong></p>
<ul>
<li>When importing CSV/XLS, you can now set the type for multiple selected columns at once. You may also opt to automatically detect column types. (<a href="https://github.com/electroly/sqlnotebook/issues/45" data-hovercard-type="issue" data-hovercard-url="/brianluft/sqlnotebook/issues/45/hovercard">#45</a>)</li>
<li>You can now import non-public schemas in PostgreSQL. (<a href="https://github.com/electroly/sqlnotebook/issues/47" data-hovercard-type="issue" data-hovercard-url="/brianluft/sqlnotebook/issues/47/hovercard">#47</a>)</li>
<li>Fixed handling of blank or missing column names in CSV/XLS files.</li>
<li>Updated to <a href="https://www.sqlite.org/releaselog/3_38_5.html" rel="nofollow">SQLite 3.38.5</a>.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v1.1.02022-05-08T21:23:24Zv1.1.0<p>Requires 64-bit Windows 7 or newer.</p>
<p>Windows 7 users: <a href="https://sqlnotebook.com/windows-7.html" rel="nofollow">Service Pack 1 and security update KB2533623</a> are required.</p>
<p><strong>Changes</strong></p>
<ul>
<li>Updated to <a href="https://www.sqlite.org/releaselog/3_38_0.html" rel="nofollow">SQLite 3.38.0</a>.</li>
<li>Added the crypto, fuzzy, and stats extensions from <a href="https://github.com/nalgeon/sqlean/">Anton Zhiyanov's sqlean project</a>.</li>
<li>Enabled the <a href="https://sqlite.org/lang_corefunc.html#load_extension" rel="nofollow">load_extension function</a> for loading custom SQLite extensions.</li>
<li>You can now drag-and-drop a CSV or Excel file onto the SQL Notebook window to import it.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v1.0.12022-03-04T06:37:30Zv1.0.1<p>Requires 64-bit Windows 7 or newer.</p>
<p>Windows 7 users: <a href="https://sqlnotebook.com/windows-7.html" rel="nofollow">Service Pack 1 and security update KB2533623</a> are required.</p>
<p><strong>Changes</strong></p>
<ul>
<li>On Windows 7, an error message was preventing the application from launching. This has been fixed. Windows 7 users, please see the <a href="https://sqlnotebook.com/windows-7.html" rel="nofollow">System Requirements for Windows 7</a>.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v1.0.02021-12-16T07:48:26Zv1.0.0<p>Requires 64-bit Windows 7 (or newer).</p>
<p><strong>Changes</strong></p>
<ul>
<li>This is the first stable release. All aspects of the application have been improved and polished.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v0.62021-12-13T05:36:02Zv0.6<p>Requires 64-bit Windows 7 with <a href="https://dotnet.microsoft.com/download/dotnet-framework" rel="nofollow">.NET Framework 4.6</a> (or newer).</p>
<p><strong>Changes</strong></p>
<ul>
<li>First public release.</li>
</ul>electrolytag:github.com,2008:Repository/52743252/v0.52016-04-25T08:26:02Zv0.5<ul>
<li>Fixed exception when binding NULL to query parameter.</li>
<li>Added additional help pages.</li>
<li>Removed "root_" prefix from imported JSON table names.</li>
<li>Installer and application are now signed.</li>
</ul>electroly