Upload index.html with huggingface_hub
Browse files- index.html +240 -17
index.html
CHANGED
|
@@ -1,19 +1,242 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 6 |
+
<title>SQL Server Express limits — check your configuration free</title>
|
| 7 |
+
<meta name="description" content="Check T-SQL, ini, and compose lines for features SQL Server Express cannot run and see the Express fix.">
|
| 8 |
+
<style>
|
| 9 |
+
:root{color-scheme:light}body{margin:0;font:15px/1.55 system-ui,-apple-system,"Segoe UI",sans-serif;background:#faf9f5;color:#1a1512}
|
| 10 |
+
.wrap{max-width:960px;margin:0 auto;padding:28px 18px 60px}h1{font-size:26px;margin:0 0 6px}.lede{color:#4a403a;margin:0 0 16px}
|
| 11 |
+
textarea{width:100%;min-height:260px;font:13px/1.45 ui-monospace,Menlo,Consolas,monospace;padding:12px;border:1px solid #d9d0c4;border-radius:8px;box-sizing:border-box}
|
| 12 |
+
.bar{display:flex;gap:10px;align-items:center;margin:12px 0}button{font:600 15px system-ui;padding:10px 18px;border:0;border-radius:8px;background:#1a1512;color:#fff;cursor:pointer}
|
| 13 |
+
input[type=date]{font:14px system-ui;padding:8px;border:1px solid #d9d0c4;border-radius:6px}
|
| 14 |
+
table{border-collapse:collapse;width:100%;font-size:14px;margin-top:10px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid #eee;vertical-align:top}th{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#7a6e65}
|
| 15 |
+
.sev.error{color:#a8551f;font-weight:700}.sev.warn,.sev.warning{color:#96691f}.ok{color:#2a6446;font-weight:600}.sum{font-weight:600}
|
| 16 |
+
.note{font-size:13px;color:#7a6e65;margin-top:18px}#paid{margin-top:22px;padding:14px 16px;border:1px solid #e2d8cb;border-radius:10px;background:#fffdfa}
|
| 17 |
+
</style>
|
| 18 |
+
<script data-grow-initializer="">!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement("script");(e.type="text/javascript"),(e.src="https://faves.grow.me/main.js"),(e.defer=!0),e.setAttribute("data-grow-faves-site-id","U2l0ZTphZjljMzgyMC0yMmU5LTRhYjgtYTIxNS03OTRhMGY1N2ExYzM=");var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t);})();</script>
|
| 19 |
+
<style data-yj-mfit="1">#out{max-width:100%}#out td,#out th{overflow-wrap:break-word}#out th{white-space:nowrap}#out pre{white-space:pre-wrap;overflow-wrap:anywhere}#out code{white-space:pre-wrap;overflow-wrap:break-word}@media (max-width:640px){#out td,#out th{overflow-wrap:anywhere}#out th{white-space:normal}table{display:block;max-width:100%;overflow-x:auto}pre{max-width:100%;overflow-x:auto}code,a{overflow-wrap:anywhere}img,svg,video,canvas,iframe{max-width:100%}textarea,input,select{max-width:100%;box-sizing:border-box}.yj-lgbar{position:static!important;justify-content:flex-end;margin:0 0 10px}h1,h2,h3,h4,p,li,dd,dt,blockquote,figcaption,summary,label,.res,.lead{overflow-wrap:anywhere}label{max-width:100%;box-sizing:border-box}#out table:not(:has(tr>:nth-child(4))){display:table;table-layout:fixed;width:100%}#out table:has(tr>:nth-child(4)),#out table:has(tr>:nth-child(4)) tbody,#out table:has(tr>:nth-child(4)) tr,#out table:has(tr>:nth-child(4)) td{display:block;width:auto;overflow:visible}#out table:has(tr>:nth-child(4)) thead{display:none}#out table:has(tr>:nth-child(4)) tr{padding:10px 0;border-bottom:1px solid rgba(128,128,128,.28)}#out table:has(tr>:nth-child(4)) td{border:0;padding:1px 0}#out table:has(tr>:nth-child(4)) td:nth-child(-n+3){display:inline-block;margin-right:10px;font-size:12px;opacity:.78}}</style>
|
| 20 |
+
<!--yj-canon-s101--><link rel="canonical" href="https://getreadystack.com/tools/sql-server-express-downgrade-check"><!--yj-trust-org-s191--><script type="application/ld+json" data-yj="yj-trust-org">{"@context": "https://schema.org", "@type": "Organization", "name": "ReadyStack", "url": "https://getreadystack.com/", "logo": "https://getreadystack.com/branding/readystack_profile.png", "email": "support@getreadystack.com", "contactPoint": {"@type": "ContactPoint", "contactType": "customer support", "email": "support@getreadystack.com", "availableLanguage": ["English", "German", "Japanese", "Spanish", "Portuguese"]}}</script><!--/yj-trust-org-s191--></head>
|
| 21 |
+
<body>
|
| 22 |
+
<div class="wrap">
|
| 23 |
+
<h1>SQL Server Express limits — check your configuration free</h1>
|
| 24 |
+
<p class="lede">Moving off SQL Server Standard or Developer to free Express? Lists every T-SQL, ini and compose line Express cannot run (Agent jobs, Database Mail, backup compression, 10 GB cap) with the Express fix. Runs entirely in your browser — nothing is uploaded.</p>
|
| 25 |
+
<textarea id="src" spellcheck="false">-- clinic_app maintenance script, written for SQL Server Standard
|
| 26 |
+
-- target: 2022 (moving this box to SQL Server Express)
|
| 27 |
+
CREATE DATABASE clinic_app
|
| 28 |
+
ON PRIMARY (NAME = clinic_data, FILENAME = 'D:\data\clinic_app.mdf', SIZE = 2GB, MAXSIZE = 25GB, FILEGROWTH = 512MB)
|
| 29 |
+
LOG ON (NAME = clinic_log, FILENAME = 'E:\log\clinic_app.ldf', SIZE = 1GB, MAXSIZE = 20GB);
|
| 30 |
+
GO
|
| 31 |
+
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
|
| 32 |
+
EXEC sp_configure 'max server memory (MB)', 8192; RECONFIGURE;
|
| 33 |
+
GO
|
| 34 |
+
USE clinic_app;
|
| 35 |
+
EXEC sys.sp_cdc_enable_db;
|
| 36 |
+
GO
|
| 37 |
+
EXEC msdb.dbo.sp_add_job @job_name = N'nightly-backup';
|
| 38 |
+
EXEC msdb.dbo.sp_add_jobstep @job_name = N'nightly-backup', @step_name = N'full', @subsystem = N'TSQL',
|
| 39 |
+
@command = N'BACKUP DATABASE clinic_app TO DISK = ''F:\bak\clinic_app.bak'' WITH INIT, CHECKSUM';
|
| 40 |
+
GO
|
| 41 |
+
BACKUP DATABASE clinic_app TO DISK = 'F:\bak\clinic_app_manual.bak'
|
| 42 |
+
WITH INIT, COMPRESSION, CHECKSUM;
|
| 43 |
+
GO
|
| 44 |
+
EXEC msdb.dbo.sp_send_dbmail @profile_name = N'ops', @recipients = N'ops@clinic.example', @subject = N'Backup done';
|
| 45 |
+
GO</textarea>
|
| 46 |
+
<div class="bar"><button id="go">Check</button><label>as of <input type="date" id="today"></label></div>
|
| 47 |
+
<div id="out" aria-live="polite"></div>
|
| 48 |
+
<div id="paid"><strong>Free here:</strong> Check the open .sql, ConfigurationFile.ini or compose file and list every line SQL Server Express cannot run, with the exact Express replacement line.. <strong>In the editor:</strong> The whole workspace in one Express migration plan, a dated edition report for the company (paid-edition pulls and Standard licence cost at $3,945 per 2-core pack) and a CI gate that fails a build adding an Agent job or a paid MSSQL_PID. — that part asks for a licence key.</div>
|
| 49 |
+
<p class="note">Same engine as the VS Code extension, byte for byte.</p>
|
| 50 |
+
</div>
|
| 51 |
+
<script>var SQLEXP_RULES = [
|
| 52 |
+
{"id": "agent-job", "sev": "error", "pattern": "\\b(sp_add_job|sp_add_jobstep|sp_add_jobschedule|sp_add_schedule|sp_attach_schedule|sp_add_jobserver|sp_start_job|sp_update_job)\\b",
|
| 53 |
+
"title": "SQL Server Agent job", "why": "Express has no SQL Server Agent (Microsoft editions table: SQL Server Agent = No for Express in 2022 and 2025), so this job is created but never runs.",
|
| 54 |
+
"fix": "Save the job body as job.sql and schedule `sqlcmd -S .\\SQLEXPRESS -E -i job.sql` with Windows Task Scheduler or cron."},
|
| 55 |
+
{"id": "db-mail", "sev": "error", "pattern": "\\b(sp_send_dbmail|sysmail_add_\\w+|sysmail_configure_sp)\\b",
|
| 56 |
+
"title": "Database Mail", "why": "Express has no Database Mail (editions table: Database mail = No for Express), so alerts sent from T-SQL are never delivered.",
|
| 57 |
+
"fix": "Send the alert from the application or from the scheduled script that runs sqlcmd (check its exit code)."},
|
| 58 |
+
{"id": "backup-compression", "sev": "error", "kind": "backup-compression",
|
| 59 |
+
"title": "Backup compression", "why": "Express does not support backup compression (editions table: Backup compression = No for Express); BACKUP ... WITH COMPRESSION fails, so the backup is not written.",
|
| 60 |
+
"fix": "Remove COMPRESSION from the WITH list and compress the .bak afterwards (gzip, 7-Zip or Compress-Archive)."},
|
| 61 |
+
{"id": "db-size-cap", "sev": "error", "kind": "db-size-cap",
|
| 62 |
+
"title": "Database size over the Express cap", "why": "Express caps a relational database at 10 GB on SQL Server 2022 and 50 GB on SQL Server 2025 (data files; the log does not count). Past the cap, inserts fail.",
|
| 63 |
+
"fix": "Set MAXSIZE to the cap (10GB on 2022, 50GB on 2025) so growth stops with a clear error, archive old rows, or keep this database on Standard."},
|
| 64 |
+
{"id": "max-memory", "sev": "warn", "kind": "max-memory",
|
| 65 |
+
"title": "max server memory above the Express buffer pool", "why": "Express uses at most 1,410 MB of buffer pool per instance, whatever max server memory says.",
|
| 66 |
+
"fix": "EXEC sp_configure 'max server memory (MB)', 2048; -- 1,410 MB buffer pool + headroom; size the box for the Express cap"},
|
| 67 |
+
{"id": "tde", "sev": "error", "pattern": "CREATE\\s+DATABASE\\s+ENCRYPTION\\s+KEY|SET\\s+ENCRYPTION\\s+ON",
|
| 68 |
+
"title": "Transparent data encryption (TDE)", "why": "Express has no TDE (editions table: Transparent data encryption = No for Express); the statement fails and the database stays unencrypted.",
|
| 69 |
+
"fix": "Encrypt the disk instead (BitLocker on Windows, LUKS on Linux) or use Always Encrypted for the sensitive columns (available in Express)."},
|
| 70 |
+
{"id": "cdc", "sev": "error", "pattern": "\\bsp_cdc_enable_(db|table)\\b",
|
| 71 |
+
"title": "Change data capture", "why": "Express has no change data capture (editions table: Change data capture = No for Express).",
|
| 72 |
+
"fix": "ALTER DATABASE CURRENT SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON); -- Change tracking is in Express"},
|
| 73 |
+
{"id": "log-shipping", "sev": "error", "pattern": "\\bsp_add_log_shipping_\\w+",
|
| 74 |
+
"title": "Log shipping", "why": "Express has no log shipping (editions table: Log shipping = No for Express), and it needs SQL Server Agent to copy and restore.",
|
| 75 |
+
"fix": "Back up the log on a schedule (sqlcmd + Task Scheduler/cron), copy the file, and restore WITH NORECOVERY on the standby server."},
|
| 76 |
+
{"id": "availability-group", "sev": "error", "pattern": "\\b(CREATE|ALTER)\\s+AVAILABILITY\\s+GROUP\\b|\\bSET\\s+HADR\\b",
|
| 77 |
+
"title": "Availability group", "why": "Express has no Always On availability groups, not even basic ones (editions table: Basic availability groups = No for Express).",
|
| 78 |
+
"fix": "Scheduled backup + restore to a second server, or keep the high-availability database on Standard (basic availability groups)."},
|
| 79 |
+
{"id": "resource-governor", "sev": "error", "pattern": "\\b(CREATE|ALTER)\\s+(RESOURCE\\s+POOL|WORKLOAD\\s+GROUP|RESOURCE\\s+GOVERNOR)\\b",
|
| 80 |
+
"title": "Resource Governor", "why": "Express has no Resource Governor (editions table: Resource governor = No for Express).",
|
| 81 |
+
"fix": "Drop the pool/workload group script; Express already limits itself to the lesser of 1 socket or 4 cores."},
|
| 82 |
+
{"id": "ini-agent", "sev": "warn", "pattern": "^\\s*AGTSVC(ACCOUNT|STARTUPTYPE|PASSWORD)\\s*=",
|
| 83 |
+
"title": "Agent service in ConfigurationFile.ini", "why": "This unattended setup file configures the SQL Server Agent service, which Express does not run.",
|
| 84 |
+
"fix": "Delete the AGTSVC* lines from ConfigurationFile.ini and schedule jobs with Task Scheduler."},
|
| 85 |
+
{"id": "paid-edition", "sev": "warn", "kind": "paid-edition",
|
| 86 |
+
"title": "Paid or non-production edition still set here", "why": "MSSQL_PID / PID chooses the edition. Developer editions are for non-production use only; Standard and Enterprise need a licence (Standard: $3,945 per 2-core pack, SQL Server 2022 list price).",
|
| 87 |
+
"fix": "MSSQL_PID=Express (containers) or remove PID= and install from the Express media (ConfigurationFile.ini)."},
|
| 88 |
+
{"id": "default-developer", "sev": "warn", "kind": "default-developer",
|
| 89 |
+
"title": "SQL Server image with no MSSQL_PID", "why": "The mcr.microsoft.com/mssql/server image defaults to the Developer edition when MSSQL_PID is not set (Docker Hub page), which is licensed for non-production use only.",
|
| 90 |
+
"fix": "Add MSSQL_PID=Express to the environment of this service."},
|
| 91 |
+
{"id": "cores-over-cap", "sev": "info", "kind": "cores-over-cap",
|
| 92 |
+
"title": "More CPU than Express will use", "why": "Express uses the lesser of 1 socket or 4 cores; cores above 4 given to this container are paid for and idle.",
|
| 93 |
+
"fix": "cpus: \"4\" (compose) or resources.limits.cpu: \"4\" (Kubernetes)."}
|
| 94 |
+
]
|
| 95 |
+
;</script>
|
| 96 |
+
<script>// SQL Server Express Downgrade Check — lists every T-SQL, ConfigurationFile.ini and compose line that
|
| 97 |
+
// SQL Server Express cannot run, with the Express replacement. Same file runs in Node (extension) and the browser.
|
| 98 |
+
(function () {
|
| 99 |
+
var RULES = (typeof module !== 'undefined') ? require('./rules.json') : window.SQLEXP_RULES;
|
| 100 |
+
var CAP_MB = { '2022': 10240, '2025': 51200 };
|
| 101 |
+
var BUFFER_MB = 1410;
|
| 102 |
+
var SOURCE = 'learn.microsoft.com/sql/sql-server/editions-and-components-of-sql-server-2022 and -2025';
|
| 103 |
+
|
| 104 |
+
function byId(id) { for (var i = 0; i < RULES.length; i++) if (RULES[i].id === id) return RULES[i]; return null; }
|
| 105 |
+
function isComment(l) { return /^\s*(--|#|;|\/\/)/.test(l); }
|
| 106 |
+
function fmt(n) { return String(n).replace(/\B(?=(\d{3})+(?!\d))/g, ','); }
|
| 107 |
+
function toMB(n, unit) {
|
| 108 |
+
unit = (unit || 'MB').toUpperCase();
|
| 109 |
+
return unit === 'TB' ? n * 1048576 : unit === 'GB' ? n * 1024 : unit === 'KB' ? n / 1024 : n;
|
| 110 |
+
}
|
| 111 |
+
function target(text, opts) {
|
| 112 |
+
if (opts && (opts.target === '2025' || opts.target === '2022')) return opts.target;
|
| 113 |
+
return /(-- *target: *2025|sql server 2025|mssql\/server:2025|\b17\.0\.\d)/i.test(text) ? '2025' : '2022';
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
function check(text, opts) {
|
| 117 |
+
opts = opts || {};
|
| 118 |
+
text = String(text || '');
|
| 119 |
+
var lines = text.split(/\r?\n/), findings = [], ver = target(text, opts), cap = CAP_MB[ver];
|
| 120 |
+
var hasBackup = /\bBACKUP\s+(DATABASE|LOG)\b/i.test(text);
|
| 121 |
+
var isExpress = /\bMSSQL_PID\s*[=:]\s*["']?Express\b/i.test(text);
|
| 122 |
+
var hasPid = /\bMSSQL_PID\b/i.test(text);
|
| 123 |
+
var inLog = false;
|
| 124 |
+
|
| 125 |
+
function add(r, i, what, extra) {
|
| 126 |
+
findings.push({ check: r.id, sev: r.sev, line: i + 1, text: lines[i].trim(),
|
| 127 |
+
msg: r.title + ': ' + what + ' — ' + (extra || r.why) + ' Express fix: ' + r.fix, fix: r.fix });
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
for (var i = 0; i < lines.length; i++) {
|
| 131 |
+
var L = lines[i], m;
|
| 132 |
+
if (isComment(L)) continue;
|
| 133 |
+
RULES.forEach(function (r) {
|
| 134 |
+
if (!r.pattern) return;
|
| 135 |
+
var mm = new RegExp(r.pattern, 'i').exec(L);
|
| 136 |
+
if (mm) add(r, i, mm[0]);
|
| 137 |
+
});
|
| 138 |
+
// backup compression: COMPRESSION in a backup script, not NO_COMPRESSION / DATA_COMPRESSION
|
| 139 |
+
if (hasBackup && /(^|[\s,(])COMPRESSION\b/i.test(L) && !/(NO_|DATA_)COMPRESSION/i.test(L)) add(byId('backup-compression'), i, 'COMPRESSION');
|
| 140 |
+
if (/'backup compression default'\s*,\s*1\b/i.test(L)) add(byId('backup-compression'), i, "'backup compression default', 1");
|
| 141 |
+
// database size cap: SIZE / MAXSIZE on data files only (skip after LOG ON until the statement ends)
|
| 142 |
+
if (/\bLOG\s+ON\b/i.test(L)) inLog = true;
|
| 143 |
+
if (/;|^\s*GO\s*$/i.test(L) && !/\bLOG\s+ON\b/i.test(L)) { var wasLog = inLog; inLog = false; if (wasLog) continue; }
|
| 144 |
+
if (!inLog) {
|
| 145 |
+
var re = /\b(MAX)?SIZE\s*=\s*(\d+(?:\.\d+)?)\s*(KB|MB|GB|TB)?\b/ig;
|
| 146 |
+
while ((m = re.exec(L))) {
|
| 147 |
+
var mb = toMB(parseFloat(m[2]), m[3]);
|
| 148 |
+
if (mb > cap) add(byId('db-size-cap'), i, m[0], 'SQL Server ' + ver + ' Express caps a database at ' + fmt(cap / 1024) + ' GB; this file is set to ' + fmt(Math.round(mb / 1024 * 10) / 10) + ' GB, so inserts fail once data passes ' + fmt(cap / 1024) + ' GB (2022: 10 GB, 2025: 50 GB; the log does not count).');
|
| 149 |
+
}
|
| 150 |
+
}
|
| 151 |
+
// max server memory above the 1,410 MB buffer pool
|
| 152 |
+
if ((m = /'max server memory[^']*'\s*,\s*(\d+)/i.exec(L)) && +m[1] > BUFFER_MB) {
|
| 153 |
+
add(byId('max-memory'), i, fmt(+m[1]) + ' MB', 'Express uses at most ' + fmt(BUFFER_MB) + ' MB of buffer pool; ' + fmt(+m[1] - BUFFER_MB) + ' MB of this setting is never used for data cache.');
|
| 154 |
+
}
|
| 155 |
+
// paid / non-production edition
|
| 156 |
+
if ((m = /\bMSSQL_PID\s*[=:]\s*["']?(Developer|StandardDeveloper|EnterpriseDeveloper|Standard|EnterpriseCore|Enterprise|Evaluation|Web|[0-9A-Z]{5}-[0-9A-Z]{5}-[0-9A-Z]{5}-[0-9A-Z]{5}-[0-9A-Z]{5})\b/i.exec(L))) add(byId('paid-edition'), i, 'MSSQL_PID=' + m[1]);
|
| 157 |
+
else if ((m = /^\s*PID\s*=\s*"?([0-9A-Z]{5}(-[0-9A-Z]{5}){4})/i.exec(L))) add(byId('paid-edition'), i, 'PID product key');
|
| 158 |
+
// image with no MSSQL_PID anywhere in the file
|
| 159 |
+
if (!hasPid && /mcr\.microsoft\.com\/mssql\/(server|rhel\/server)/i.test(L)) add(byId('default-developer'), i, (/mcr\.microsoft\.com\/\S+/.exec(L) || [''])[0]);
|
| 160 |
+
// cores above the Express cap in an Express container
|
| 161 |
+
if (isExpress && (m = /^\s*(cpus|cpu)\s*:\s*["']?(\d+(?:\.\d+)?)["']?\s*$/i.exec(L)) && parseFloat(m[2]) > 4) {
|
| 162 |
+
add(byId('cores-over-cap'), i, m[1] + ': ' + m[2], 'Express uses the lesser of 1 socket or 4 cores; ' + (parseFloat(m[2]) - 4) + ' of the ' + m[2] + ' cores given here stay idle.');
|
| 163 |
+
}
|
| 164 |
+
}
|
| 165 |
+
findings.sort(function (a, b) { return a.line - b.line; });
|
| 166 |
+
return { findings: findings, target: ver, cap_gb: cap / 1024, today: opts.today || '', source: SOURCE };
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
var api = { engine: { check: check }, RULES: RULES, RULE_COUNT: RULES.length };
|
| 170 |
+
if (typeof module !== 'undefined') module.exports = api;
|
| 171 |
+
if (typeof window !== 'undefined') window.SQLEXP_ENGINE = api;
|
| 172 |
+
})();
|
| 173 |
+
</script>
|
| 174 |
+
<script>// ⛔뼈대 — kit/scaffold.py 가 찍는다 (s143). findings [{check,sev,msg,line?}] → 글/HTML. 같은 파일이 Node 와 브라우저에서 산다.
|
| 175 |
+
'use strict';
|
| 176 |
+
function escapeHtml(s) { return String(s == null ? '' : s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); }
|
| 177 |
+
function summaryLine(res) {
|
| 178 |
+
const f = (res && res.findings) || []; const e = f.filter(function (x) { return String(x.sev || 'error').toLowerCase().startsWith('err'); }).length;
|
| 179 |
+
return f.length ? (f.length + ' finding' + (f.length === 1 ? '' : 's') + ' (' + e + ' error' + (e === 1 ? '' : 's') + ')') : 'Clean — no findings.';
|
| 180 |
+
}
|
| 181 |
+
function toText(res, label) {
|
| 182 |
+
const f = (res && res.findings) || [];
|
| 183 |
+
const lines = ['== ' + (label || '') + ' — ' + summaryLine(res)];
|
| 184 |
+
f.forEach(function (x) { lines.push(' ' + String(x.sev || 'error').toUpperCase().slice(0, 4) + ' ' + (x.line ? 'L' + x.line + ' ' : '') + (x.check || x.id || '') + ' ' + (x.msg || x.message || '')); });
|
| 185 |
+
return lines.join('\n');
|
| 186 |
+
}
|
| 187 |
+
function toHtml(res) {
|
| 188 |
+
const f = (res && res.findings) || [];
|
| 189 |
+
if (!f.length) return '<p class="ok">' + escapeHtml(summaryLine(res)) + '</p>';
|
| 190 |
+
const rows = f.map(function (x) { return '<tr><td class="sev ' + escapeHtml(String(x.sev || 'error')) + '">' + escapeHtml(String(x.sev || 'error')) + '</td><td>' + (x.line ? 'L' + escapeHtml(x.line) : '') + '</td><td><code>' + escapeHtml(x.check || x.id || '') + '</code></td><td>' + escapeHtml(x.msg || x.message || '') + '</td></tr>'; }).join('');
|
| 191 |
+
return '<p class="sum">' + escapeHtml(summaryLine(res)) + '</p><table><thead><tr><th>Level</th><th>Line</th><th>Check</th><th>What</th></tr></thead><tbody>' + rows + '</tbody></table>';
|
| 192 |
+
}
|
| 193 |
+
var SQLEXP_REPORT = { escapeHtml: escapeHtml, summaryLine: summaryLine, toText: toText, toHtml: toHtml };
|
| 194 |
+
if (typeof module !== 'undefined' && module.exports) module.exports = SQLEXP_REPORT;
|
| 195 |
+
else window.SQLEXP_REPORT = SQLEXP_REPORT;
|
| 196 |
+
</script>
|
| 197 |
+
<script>
|
| 198 |
+
(function(){
|
| 199 |
+
var src=document.getElementById('src'), out=document.getElementById('out'), go=document.getElementById('go'), today=document.getElementById('today');
|
| 200 |
+
today.value=new Date().toISOString().slice(0,10);
|
| 201 |
+
function run(){ try { var res=window.SQLEXP_ENGINE.engine.check(src.value,{today:today.value}); out.innerHTML=window.SQLEXP_REPORT.toHtml(res); } catch(e){ out.innerHTML='<p class="sev error">Could not run: '+String(e.message||e)+'</p>'; } }
|
| 202 |
+
go.onclick=run; if (src.value.trim()) run();
|
| 203 |
+
})();
|
| 204 |
+
</script>
|
| 205 |
+
|
| 206 |
+
|
| 207 |
+
<section data-yj-install="free" style="margin:2rem auto 1rem;max-width:46rem;padding:1.25rem 1.25rem;border:1px solid #cfe3d6;border-radius:12px;background:#f6fbf8;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .4rem;font-size:1.2rem">Install free</h2><p style="margin:0 0 .8rem;color:#41505f">Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.</p><a href="https://marketplace.visualstudio.com/items?itemName=ReadyStack.sql-server-express-downgrade-check" rel="noopener" data-yj-install-door="mp" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'sql-server-express-downgrade-check',src:'mp',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">VS Code Marketplace</a><a href="https://open-vsx.org/extension/readystack/sql-server-express-downgrade-check" rel="noopener" data-yj-install-door="ovsx" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'sql-server-express-downgrade-check',src:'ovsx',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Open VSX (Cursor, VSCodium)</a><pre style="margin:.5rem 0 0;padding:.6rem .8rem;background:#f3f5f8;border-radius:8px;font-size:.9rem;overflow:auto">ext install ReadyStack.sql-server-express-downgrade-check</pre><p style="margin:.6rem 0 0;font-size:.92rem;color:#41505f"><a href="https://getreadystack.com/api/buy/team" rel="nofollow" style="color:#0f7b3f;text-decoration:underline">Team? One key for every ReadyStack linter, 5 seats, $149 once</a></p></section>
|
| 208 |
+
<section data-yj-alert="rule" style="margin:1rem auto 1.5rem;max-width:46rem;padding:1.1rem 1.25rem;border:1px solid #d9dee6;border-radius:12px;background:#fbfcfd;font:15px/1.55 system-ui,-apple-system,Segoe UI,sans-serif"><b style="font-size:1.05rem">Get one email when this rule changes</b><div style="opacity:.78;margin:.35rem 0 .8rem">We watch the regulation and vendor sources behind SQL Server Express Downgrade Check every day. When a rule changes, you get a single email with what changed and the updated check. No newsletter.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjae" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:#fff;color:inherit"><button id="yjab" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;background:#0f7b3f;color:#fff;font:600 15px system-ui,sans-serif">Notify me</button></div><div id="yjao" hidden style="margin-top:.6rem;color:#0f7b3f">You're on the list. One email when it changes.</div><script>(function(){var b=document.getElementById("yjab"),e=document.getElementById("yjae");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"sql-server-express-downgrade-check",lang:"en",source:"rule_alert"+((b.closest&&b.closest("section")&&b.closest("section").getAttribute("data-yj-moved"))?"_at_result":"")})}).then(function(r){var o=document.getElementById("yjao");o.hidden=false;if(!r.ok){o.textContent="Could not save - please try again.";}}).catch(function(){var o=document.getElementById("yjao");o.hidden=false;o.textContent="Could not save - please try again.";});});})();</script><script>(function(){var e=document.getElementById("yjae"),s=e&&e.closest?e.closest("section"):null,o=document.getElementById("out");if(!s||!o)return;var d=false;function mv(ev){if(d)return;if(ev&&ev.target&&s.contains(ev.target))return;d=true;var b=o;while(b.parentNode&&b.parentNode!==document.body&&b.parentNode.tagName!=="MAIN"&&b.parentNode.tagName!=="ARTICLE")b=b.parentNode;if(!b.parentNode||b===s||b.contains(s))return;try{b.parentNode.insertBefore(s,b.nextSibling);s.setAttribute("data-yj-moved","1");}catch(_){}}document.addEventListener("input",mv,true);document.addEventListener("change",mv,true);document.addEventListener("click",function(ev){var b=ev.target&&ev.target.closest?ev.target.closest("button,input[type=submit]"):null;if(b&&!b.closest("[data-yj],[data-yj-cta],[data-yj-install],[data-yj-alert],.yj-find,.yj-related,#yj-ask,.yjp"))mv(ev);},true);})();</script></section>
|
| 209 |
+
|
| 210 |
+
<section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the full version <span class="yj-price">$29</span></h2><p class="yj-cta-paid" style="margin:.25rem 0 .6rem;color:#1f2a37">The whole workspace in one Express migration plan, a dated edition report for the company (paid-edition pulls and Standard licence cost at $3,945 per 2-core pack) and a CI gate that fails a build adding an Agent job or a paid MSSQL_PID. Team key $149.</p><p class="yj-cta-pay" style="margin:.25rem 0 1rem;color:#5b6b7c;font-size:.94rem">One payment, one licence key for this tool. The key is shown right after payment.</p><p class="yj-cta-anchor" style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">Staying on SQL Server Standard: $3,945 per 2-core pack (SQL Server 2022 list price, microsoft.com); a 4-core server is 2 x $3,945 = $7,890. Express is free.</p><a href="https://getreadystack.com/api/buy/cl/polar_cl_pAw27FO18oG5RH0Le1rv0dym8ri6no49EIUSq3Uf3Xx" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $29</a></section><!--yj-trust-strip-s191--><aside data-yj="yj-trust-strip" style="max-width:46rem;margin:-1.8rem auto 2.4rem;padding:.9rem 1.2rem;border:1px solid #d8dee9;border-radius:12px;background:#f6f8fb;font:14.5px/1.55 system-ui,-apple-system,Segoe UI,sans-serif;color:#2b3640"><p style="margin:0 0 .3rem;font-weight:600">Buying here, plainly</p><ul style="margin:0;padding-left:1.2rem"><li style="margin:.25rem 0">Payment runs on Whop’s checkout: your card details go to Whop, not to us, and Whop emails you the receipt.</li><li style="margin:.25rem 0">Your licence key shows on the next page right after payment and stays in your Whop account (Your purchases).</li><li style="margin:.25rem 0">Chose a subscription? Cancel any time in your Whop account (Orders → Cancel membership); access lasts until the end of the period you paid.</li><li style="margin:.25rem 0">Your inputs are calculated in your browser and are not sent to us (unless you ask for the result by email).</li><li style="margin:.25rem 0">Questions before buying? support@getreadystack.com — we answer within 2 business days.</li></ul></aside><!--/yj-trust-strip-s191-->
|
| 211 |
+
|
| 212 |
+
|
| 213 |
+
|
| 214 |
+
|
| 215 |
+
|
| 216 |
+
|
| 217 |
+
|
| 218 |
+
|
| 219 |
+
|
| 220 |
+
|
| 221 |
+
<!--yj-embed-s178--><details id="embed" data-yj="yj-embed" style="max-width:46rem;margin:1.6rem auto;padding:.85rem 1.1rem;border:1px solid #8884;border-radius:10px"><summary style="cursor:pointer;font-weight:600">Embed this tool on your site (free)</summary><p style="margin:.6rem 0;opacity:.85">Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.</p><textarea readonly rows="6" style="width:100%;font:12px/1.4 ui-monospace,Menlo,Consolas,monospace;border:1px solid #8886;border-radius:7px;padding:.5rem"><iframe src="https://getreadystack.com/embed/sql-server-express-downgrade-check/" title="SQL Server Express Downgrade Check — free online check" loading="lazy" data-rs-embed="en-sql-server-express-downgrade-check" style="width:100%;max-width:760px;height:640px;border:1px solid #e3e3e3;border-radius:10px"></iframe>
|
| 222 |
+
<p style="font-size:13px;margin:6px 0 0"><a href="https://getreadystack.com/tools/sql-server-express-downgrade-check">SQL Server Express Downgrade Check — free online check</a> by <a href="https://getreadystack.com/">ReadyStack</a></p>
|
| 223 |
+
<script>window.addEventListener("message",function(e){if(e.origin!=="https://getreadystack.com"||!e.data||e.data.type!=="readystack-embed")return;var f=document.querySelectorAll("iframe[data-rs-embed]");for(var i=0;i<f.length;i++){if(f[i].contentWindow===e.source)f[i].style.height=Math.min(e.data.h+6,8000)+"px";}});</script></textarea><p style="margin:.5rem 0 0"><button type="button" data-yj="yj-embed-copy" style="font:inherit;padding:8px 14px;border:1px solid #8884;border-radius:9px;background:transparent;cursor:pointer">Copy code</button> <a href="/embed/">All embeddable tools</a></p><p style="margin:.7rem 0 0;font-size:.92em;opacity:.9">For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. <a href="/embed/pro/?ref=embed_box">See Pro →</a></p></details><script data-yj="yj-embed">(function(){var b=document.querySelector("[data-yj=yj-embed-copy]");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var a=b.closest("details").querySelector("textarea");var v=a.value;function d(){b.textContent="Copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(v).then(d,function(){a.select();});}else{a.select();}});})();</script><!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button><button id="yjimg" type="button" style="font:inherit;padding:10px 18px;margin-left:8px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Save result as image</button></div><script>(function(){var b=document.getElementById("yjimg");if(!b)return;b.addEventListener("click",function(){var o=document.getElementById("out");var txt=(o&&(o.innerText||o.textContent)||"").trim();if(!txt){b.textContent="(no result yet)";setTimeout(function(){b.textContent="Save result as image";},1500);return;}var lines=txt.split(String.fromCharCode(10)).filter(function(x){return x.trim();}).slice(0,10);var W=1200,P=56,c=document.createElement("canvas");c.width=W;var lh=38,H=P*2+70+lines.length*lh+60;c.height=H;var x=c.getContext("2d");x.fillStyle="#1a1512";x.fillRect(0,0,W,H);x.fillStyle="#f3e9d2";x.font="600 34px system-ui,Segoe UI,Arial";var t=(document.title||"").split("|")[0].trim();x.fillText(t.slice(0,54),P,P+34);x.font="22px ui-monospace,Menlo,Consolas,monospace";x.fillStyle="#e8dcc4";for(var i=0;i<lines.length;i++){x.fillText(lines[i].slice(0,88),P,P+70+i*lh+22);}x.font="600 22px system-ui,Segoe UI,Arial";x.fillStyle="#c9a227";var d=location.hostname.replace("www.","");x.fillText(d,W-P-x.measureText(d).width,H-P+6);c.toBlob(function(bl){var u=URL.createObjectURL(bl),a=document.createElement("a");a.href=u;a.download=(t||"result").replace(/[^a-z0-9]+/gi,"-").toLowerCase()+"-"+d+".png";document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(u);a.remove();},2000);},"image/png");});})();</script><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script>
|
| 224 |
+
<script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script>
|
| 225 |
+
|
| 226 |
+
<script data-yj="yj-use-beacon">(function(){try{var o=document.getElementById('out');if(!o)return;var p=location.pathname,k='yju:'+p,sent=false;function fire(){if(sent||sessionStorage.getItem(k))return;if(!(o.textContent||'').replace(/\s+/g,'').length)return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}var mo=new MutationObserver(function(){fire();if(sent)mo.disconnect();});mo.observe(o,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script>
|
| 227 |
+
|
| 228 |
+
<script data-yj="yj-prefill-s181 v1">(function(){try{var q=new URLSearchParams(location.search);if(!q.toString())return;var P={"R": {"employee": ["employee|w-?2\\b|arbeitnehmer|angestellt|会社員|従業員|給与所得|trabajador|asalariad|empregad|clt\\b|salari", "Employee"], "self": ["self-?employ|freelanc|sole (trader|prop)|selbst(ä|ae)ndig|freiberuf|個人事業|フリーランス|aut(ó|o)nom|\\bmei\\b", "Freelancer / self-employed"], "landlord": ["landlord|rental|vermiet|大家|不動産|arrendador|alquiler|locador|aluguel", "Landlord"], "investor": ["invest|trader|anleger|投資|inversor|investidor", "Investor / trader"], "employer": ["employer|arbeitgeber|雇用主|事業主|empleador|empregador", "Employer"], "seller": ["seller|online shop|h(ä|ae)ndler|販売|vendedor|e-?commerce", "Online seller"]}, "C": {"US": "^(us|usa)$|united states|estados unidos|vereinigte staaten|アメリカ|米国", "UK": "^(uk|gb)$|united kingdom|great britain|reino unido|vereinigtes k|イギリス|英国", "DE": "^de$|germany|deutschland|alemania|alemanha|ドイツ", "JP": "^jp$|japan|jap(ó|ã|o)n?|日本", "ES": "^es$|spain|españa|espana|espanha|spanien|スペイン", "BR": "^br$|brazil|brasil|ブラジル"}, "B": "your 2027 dates", "L": "en"};function ours(el){return !!(el&&el.closest&&el.closest("[data-yj],[data-yj-cta],[data-yj-cal],.yj-email-gate,.yj-find,.yj-related,#yj-ask,#yjgo,#yjr,header,footer,nav"));}function fields(){var r=document.querySelector("main")||document.body;return [].filter.call(r.querySelectorAll("input,select,textarea"),function(el){var t=(el.type||"").toLowerCase();return !ours(el)&&!el.disabled&&["email","hidden","search","password","file","submit","button","reset","image"].indexOf(t)<0;});}function key(el){return el.getAttribute("data-k")||el.id||el.name||"";}function fire(el){["input","change"].forEach(function(n){try{el.dispatchEvent(new Event(n,{bubbles:true}))}catch(e){}});}function setv(el,v){v=String(v).slice(0,80);var t=(el.type||"").toLowerCase(),tg=el.tagName;if(tg=="SELECT"){var o=[].filter.call(el.options,function(o){return o.value==v||o.text.trim()==v})[0];if(!o)return false;el.value=o.value;}else if(t=="checkbox"||t=="radio"){if(!/^(1|0|true|false|on|off|yes|no)$/i.test(v))return false;el.checked=/^(1|true|on|yes)$/i.test(v);}else if(t=="number"||t=="range"){var n=parseFloat(v.replace(/\s/g,"").replace(",","."));if(!isFinite(n))return false;el.value=String(n);}else if(t=="date"){if(!/^\d{4}-\d{2}-\d{2}$/.test(v))return false;el.value=v;}else{if(/[<>]/.test(v))return false;el.value=v;}fire(el);return true;}function pick(el,rx){if(el.tagName!="SELECT")return false;var re=new RegExp(rx,"i");var o=[].filter.call(el.options,function(o){return re.test(o.value)||re.test(o.text)})[0];if(!o||el.value==o.value)return false;el.value=o.value;fire(el);return true;}function run(){var F=fields(),done={},n=0;q.forEach(function(v,k){if(n>=20||/^(ref|role|cc|utm_.*|fbclid|gclid)$/.test(k)||!/^[A-Za-z0-9_-]{1,40}$/.test(k))return;F.forEach(function(el){if(key(el)===k&&!done[k]&&setv(el,v)){done[k]=1;n++;}});});var cc=(q.get("cc")||"").toUpperCase().replace(/[^A-Z]/g,"");if(P.C[cc])F.forEach(function(el){var k=key(el);if(!done[k]&&/country|land|pa(i|í)s|pays|国/i.test(k+" "+(el.id||""))&&pick(el,P.C[cc])){done[k]=1;n++;}});var ro=(q.get("role")||"").replace(/[^a-z]/g,""),R=P.R[ro];if(R)F.forEach(function(el){var k=key(el);if(!done[k]&&el.tagName=="SELECT"&&[].some.call(el.options,function(o){return [].some.call(Object.keys(P.R),function(x){return new RegExp(P.R[x][0],"i").test(o.text)})})&&pick(el,R[0])){done[k]=1;n++;}});if(q.get("ref")=="calendar"){var h=document.querySelector("main h1")||document.querySelector("h1");var d=document.createElement("div");d.setAttribute("data-yj","yj-prefill-back");d.style.cssText="margin:.4rem 0 .8rem;font:15px/1.5 system-ui,sans-serif;opacity:.9";var a=document.createElement("a");a.href="/"+P.L+"/calendar/?ref=tool"+(R?"&role="+ro:"")+(P.C[cc]?"&cc="+cc:"");a.textContent=(R?R[1]+" \u00b7 ":"")+P.B+" \u2192";d.appendChild(a);if(h&&h.parentNode)h.parentNode.insertBefore(d,h.nextSibling);}document.documentElement.setAttribute("data-yj-prefilled",String(n));}if(document.readyState=="loading")document.addEventListener("DOMContentLoaded",run);else run();}catch(e){}})();</script><div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&","<":"<",">":">",'"':"""}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div><section data-yj="yj-facts-v1" style="max-width:920px;margin:48px auto 0;padding:0 20px;font-family:system-ui,sans-serif"><style>.yj-article p{font:400 15.5px/1.7 system-ui,sans-serif;color:#26313b;margin:0 0 12px;max-width:72ch}.yj-article h2,.yj-article h3,.yj-article h4{font:600 17px/1.35 system-ui,sans-serif;color:#1b1f24;margin:22px 0 8px}.yj-article table{border-collapse:collapse;margin:10px 0 16px;font:14px/1.45 system-ui,sans-serif}.yj-article th,.yj-article td{border:1px solid #e2e6ea;padding:6px 10px;text-align:left}.yj-article th{background:#f4f6f8}.yj-article pre{background:#0f1720;color:#e6edf3;padding:12px 14px;border-radius:8px;overflow:auto;font:13px/1.5 ui-monospace,Menlo,monospace}.yj-article code{font:13px ui-monospace,Menlo,monospace;background:#f1f3f5;padding:1px 4px;border-radius:3px}.yj-article pre code{background:none;padding:0}.yj-article ul,.yj-article ol{font:15px/1.6 system-ui,sans-serif;color:#26313b}</style><p style="font:400 13px/1.5 system-ui,sans-serif;color:#6b7680;margin:0 0 14px"><time datetime="2026-10-14">Updated 2026-10-14</time> · ReadyStack</p><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-10-14","author":{"@type":"Organization","name":"ReadyStack"}}</script><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Worked example</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 16px;color:#5b6570">Real numbers from this tool, line by line.</p><div class="yj-article"><p><img src="https://getreadystack.com/img/promo/sku674161_result_card.jpg" alt="Migrate from SQL Server Standard to SQL Server Express: what breaks before you save $7,890" loading="lazy" style="max-width:100%;border-radius:6px"></p>
|
| 229 |
+
<p>$7,890 saved, nightly backup dead: that is what a DBA or .NET developer in the US, UK or EU gets when they move a 4-core SQL Server Standard server (2 x $3,945 per 2-core pack, SQL Server 2022 list price) to free SQL Server Express without reading the scripts first. We ran SQL Server Express Downgrade Check on a sample maintenance script for a small clinic app, written for Standard. It found 7 lines Express cannot run:</p>
|
| 230 |
+
<table><thead><tr><th>Line</th><th>What the script does</th><th>What Express does</th></tr></thead><tbody><tr><td>4</td><td>MAXSIZE = 25GB</td><td>Caps the database at 10 GB (SQL Server 2022)</td></tr><tr><td>8</td><td>max server memory 8,192 MB</td><td>Uses 1,410 MB of buffer pool; 6,782 MB never caches data</td></tr><tr><td>11</td><td>sp_cdc_enable_db</td><td>No change data capture</td></tr><tr><td>13, 14</td><td>sp_add_job / sp_add_jobstep (nightly-backup)</td><td>No SQL Server Agent: the job is created and never runs</td></tr><tr><td>18</td><td>BACKUP ... WITH COMPRESSION</td><td>No backup compression</td></tr><tr><td>20</td><td>sp_send_dbmail</td><td>No Database Mail: the "backup done" mail never arrives</td></tr></tbody></table>
|
| 231 |
+
<p>None of these lines throws an error on Standard, so the script looks fine until it runs on the new server.</p>
|
| 232 |
+
<h3>Where the limits come from</h3>
|
| 233 |
+
<p>Microsoft's own pages, "Editions and supported features of SQL Server 2022" and "... SQL Server 2025", list Express with a 10 GB maximum relational database size on 2022 and 50 GB on 2025, a 1,410 MB buffer pool, and compute limited to the lesser of 1 socket or 4 cores. The same tables mark SQL Server Agent, Database mail, Backup compression, Log shipping, transparent data encryption, change data capture, Resource governor and basic availability groups as "No" for Express.</p>
|
| 234 |
+
<p>For containers, Microsoft's environment-variable page says MSSQL_PID chooses the edition, and the Developer edition is for non-production use. The mcr.microsoft.com/mssql/server image runs Developer when MSSQL_PID is not set, so a compose file with no MSSQL_PID is not Express either.</p>
|
| 235 |
+
<h3>The quiet failures</h3>
|
| 236 |
+
<p>The expensive one is the Agent job. On Express, sp_add_job creates the job in msdb, but nothing runs it: no Agent service. The nightly backup simply stops, and nobody gets an e-mail about it, because Database Mail is missing too. The fix is plain: save the job step as job.sql and schedule sqlcmd -S .\SQLEXPRESS -E -i job.sql with Windows Task Scheduler or cron, and send the alert from that script.</p>
|
| 237 |
+
<p>The second is size. A database set to MAXSIZE = 25GB on Express stops taking inserts at 10 GB on SQL Server 2022. Set MAXSIZE to the cap so growth stops with a clear error, archive old rows, or keep that one database on Standard. If you are moving to SQL Server 2025, the cap is 50 GB; the tool reads a "-- target: 2025" comment or a mssql/server:2025 image and checks against 50 GB instead.</p>
|
| 238 |
+
<h3>What the check covers</h3>
|
| 239 |
+
<p>14 rules over .sql scripts, ConfigurationFile.ini, Dockerfile and docker-compose files: Agent jobs, Database Mail, backup compression, the size cap, max server memory, TDE, change data capture, log shipping, availability groups, Resource Governor, AGTSVC lines in setup files, paid MSSQL_PID values or product keys, images with no MSSQL_PID, and cores above 4 in an Express container. Each finding gives the file, the line and the Express replacement line.</p>
|
| 240 |
+
<h3>Free and full version</h3>
|
| 241 |
+
<p>The free check covers the open file in VS Code or on the web page, with every finding and every fix, no key. The full version adds the whole workspace in one migration plan, a dated edition report for the company and a CI gate that fails a build adding an Agent job or a paid MSSQL_PID.</p></div><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:30px 0 10px;color:#1b1f24">15 seconds — what it actually does</h2><video controls muted playsinline preload="none" poster="/img/promo/sku674161_result_card.jpg" style="width:100%;max-width:360px;border-radius:10px;display:block;margin:0 auto"><source src="/media/sku674161_short.mp4" type="video/mp4"></video><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:34px 0 6px;color:#1b1f24">Questions people ask</h2><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does SQL Server Express Downgrade Check do?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">It reads .sql scripts, ConfigurationFile.ini and docker-compose or Dockerfile files and lists every line SQL Server Express cannot run: SQL Server Agent jobs, Database Mail, backup compression, databases over the 10 GB cap (50 GB on SQL Server 2025), max server memory above 1,410 MB, TDE, change data capture and paid MSSQL_PID values. Each finding gives file, line and the Express replacement line.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Who is it for?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">DBAs, .NET developers and small IT teams in the US, UK or EU moving a small database from SQL Server Standard, or from a Developer container that ended up in production, to the free Express edition to cut the licence bill. It also suits consultants who inherit a client's maintenance scripts and must say what breaks before the switch.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why not just read Microsoft's editions table or ask a chatbot?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">The editions table lists missing features but does not read your scripts, and a chatbot cannot see your repository. The failures are quiet: an Agent job is created and never runs, a Database Mail alert is never sent, a compressed backup is rejected. This tool names the exact file and line for each of 14 rules, with the fix.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What is free and what does the full version add?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Free, with no key: the open file, every finding and every Express replacement line, in VS Code or on the web page. The full version is $29 once, one licence key per person or team seat: the whole workspace in one Express migration plan, a dated edition report for the company and a CI gate that fails a build adding an Agent job or a paid MSSQL_PID.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does staying on SQL Server Standard cost?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Microsoft's SQL Server 2022 list price for Standard is $3,945 per 2-core pack, so a 4-core server is 2 x $3,945 = $7,890 in licences. Express costs nothing but caps each database at 10 GB on 2022 (50 GB on 2025), the buffer pool at 1,410 MB and compute at 4 cores.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">When do the Express limits change next?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">The last change was SQL Server 2025, which raised the Express database cap from 10 GB to 50 GB; buffer pool (1,410 MB) and compute (lesser of 1 socket or 4 cores) stayed the same, and SQL Server Agent is still not included. Microsoft has announced no newer Express limits; the rules follow the editions pages, re-checked 2026-10-14.</p></details><script type="application/ld+json" data-yj="yj-faq-ld">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What does SQL Server Express Downgrade Check do?", "acceptedAnswer": {"@type": "Answer", "text": "It reads .sql scripts, ConfigurationFile.ini and docker-compose or Dockerfile files and lists every line SQL Server Express cannot run: SQL Server Agent jobs, Database Mail, backup compression, databases over the 10 GB cap (50 GB on SQL Server 2025), max server memory above 1,410 MB, TDE, change data capture and paid MSSQL_PID values. Each finding gives file, line and the Express replacement line."}}, {"@type": "Question", "name": "Who is it for?", "acceptedAnswer": {"@type": "Answer", "text": "DBAs, .NET developers and small IT teams in the US, UK or EU moving a small database from SQL Server Standard, or from a Developer container that ended up in production, to the free Express edition to cut the licence bill. It also suits consultants who inherit a client's maintenance scripts and must say what breaks before the switch."}}, {"@type": "Question", "name": "Why not just read Microsoft's editions table or ask a chatbot?", "acceptedAnswer": {"@type": "Answer", "text": "The editions table lists missing features but does not read your scripts, and a chatbot cannot see your repository. The failures are quiet: an Agent job is created and never runs, a Database Mail alert is never sent, a compressed backup is rejected. This tool names the exact file and line for each of 14 rules, with the fix."}}, {"@type": "Question", "name": "What is free and what does the full version add?", "acceptedAnswer": {"@type": "Answer", "text": "Free, with no key: the open file, every finding and every Express replacement line, in VS Code or on the web page. The full version is $29 once, one licence key per person or team seat: the whole workspace in one Express migration plan, a dated edition report for the company and a CI gate that fails a build adding an Agent job or a paid MSSQL_PID."}}, {"@type": "Question", "name": "What does staying on SQL Server Standard cost?", "acceptedAnswer": {"@type": "Answer", "text": "Microsoft's SQL Server 2022 list price for Standard is $3,945 per 2-core pack, so a 4-core server is 2 x $3,945 = $7,890 in licences. Express costs nothing but caps each database at 10 GB on 2022 (50 GB on 2025), the buffer pool at 1,410 MB and compute at 4 cores."}}, {"@type": "Question", "name": "When do the Express limits change next?", "acceptedAnswer": {"@type": "Answer", "text": "The last change was SQL Server 2025, which raised the Express database cap from 10 GB to 50 GB; buffer pool (1,410 MB) and compute (lesser of 1 socket or 4 cores) stayed the same, and SQL Server Agent is still not included. Microsoft has announced no newer Express limits; the rules follow the editions pages, re-checked 2026-10-14."}}]}</script><div id="yj-ask" style="margin:36px 0 0;padding:18px 18px 16px;border:1px solid #e2e6ea;border-radius:10px;background:#fbfbfc"><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:0 0 4px;color:#1b1f24">Ask about this tool</h2><p style="font:400 13.5px/1.5 system-ui,sans-serif;margin:0 0 12px;color:#5b6570">One question, answered by the person who built it. Your email only if you want the answer sent.</p><form onsubmit="return yjAsk(event)" style="display:grid;gap:8px"><textarea name="question" required minlength="10" maxlength="2000" rows="3" placeholder="Your question" style="font:14px/1.5 system-ui,sans-serif;padding:10px;border:1px solid #cfd6dd;border-radius:6px"></textarea><div style="display:flex;gap:8px;flex-wrap:wrap"><input type="email" name="email" placeholder="Email (optional)" style="flex:1;min-width:200px;font:14px system-ui,sans-serif;padding:9px 10px;border:1px solid #cfd6dd;border-radius:6px"><button type="submit" style="font:600 14px system-ui,sans-serif;padding:9px 18px;border:0;border-radius:6px;background:#1b1f24;color:#fff;cursor:pointer">Send</button></div><p id="yj-ask-msg" style="font:13px system-ui,sans-serif;margin:2px 0 0;color:#0a6238;min-height:1em"></p></form><script>function yjAsk(e){e.preventDefault();var f=e.target,m=document.getElementById("yj-ask-msg");m.style.color="#0a6238";fetch(location.origin+"/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sku:674161,slug:"sql-server-express-downgrade-check",lang:"en",question:f.question.value,email:f.email.value,page:location.pathname})}).then(function(r){if(!r.ok)throw 0;m.textContent="Thanks \u2014 noted. Answers land on this page and, if you left an email, in your inbox.";f.question.value="";}).catch(function(){m.style.color="#a8551f";m.textContent="Could not send. Please try again in a minute.";});return false;}</script></div></section><section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Same job, next tool</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Free in the browser. The full version is a one-time licence.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/mssql-container-licence-lint?ref=related"><span class="yj-rel-t">SQL Server Docker Licence Lint (MSSQL_PID)</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/personal-data-map-dsar-audit?ref=related"><span class="yj-rel-t">Personal Data Map: find every column a GDPR subject access request has to reac</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/content-calendar-template?ref=related"><span class="yj-rel-t">Content Calendar Template with Capacity & Cost Calculator for Small Content Te</span><span class="yj-rel-p">$90</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/revit-door-families?ref=related"><span class="yj-rel-t">Revit Door Families - UK Door Block Library in mm: 14 doors on standard 838 x </span><span class="yj-rel-p">$100</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/dotnet-eol-support-gate?ref=related"><span class="yj-rel-t">.NET EOL & CRA Support Window Gate</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/robots-txt-ai-crawler-audit?ref=related"><span class="yj-rel-t">AI Crawler Rules - robots.txt Audit for AI Search</span><span class="yj-rel-p">$29</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section><!--yj-trust-foot-s191--><footer data-yj="yj-trust-foot" style="margin:3rem auto 0;padding:1.2rem 1rem 2rem;border-top:1px solid rgba(128,128,128,.28);max-width:60rem;font:14px/1.6 system-ui,-apple-system,Segoe UI,sans-serif;color:#5b6570;text-align:center"><nav aria-label="ReadyStack" style="display:flex;gap:.4rem 1.1rem;justify-content:center;flex-wrap:wrap"><a href="/about" style="color:inherit">About</a><a href="/verify/" style="color:inherit">How we verify</a><a href="/privacy" style="color:inherit">Privacy</a><a href="/terms" style="color:inherit">Terms</a><a href="/contact.html" style="color:inherit">Contact</a><a href="mailto:support@getreadystack.com" style="color:inherit">support@getreadystack.com</a></nav><p style="margin:.6rem 0 0">🔒 Secure checkout by Whop · © 2026 ReadyStack</p></footer><!--/yj-trust-foot-s191--></body>
|
| 242 |
</html>
|