全局替换 @id 为什么会改变 SQL 日志
用完整 token 的诊断替换,对照字符串替换与命令、参数分别传送的模型。
保留命令与参数分别传送的模型
来源作者原以为 Prepare() 会暴露替换后的命令。获采纳的解释指出参数分别传送;另一答复分别记录命令和参数,作者表示这也实现了其目标。可读诊断有助于核对,但不是服务器执行记录。
只替换完整 token
全局替换 @id 还会改变 @id2 的前缀,以及注释和字面量中的同名文本。下面三个相同拼写承担不同角色;匹配报告只绑定代码区真实 token,其余源内容保持原样。
SELECT @id, @id2, N'@id' -- @id
/* outer /* @id */ comment */类型也是证据
JSON 布尔值 true 不能冒充整数 1。十进制值采用字符串,避免二进制浮点舍入;Unicode 字符串采用大写 N 与双写单引号。负数加括号,避免紧邻原有减号后形成 -- 注释。
报告保留全部有类型的值、字面量、每处引用来源位置、系统引用、未使用绑定、源文件名、SHA256、字节数及匹配方式。不会连接数据库、校验 SQL 语句、分析变量声明作用域、推断数据库排序规则或模拟驱动长度与精度强制转换,也不会执行命令。诊断不能替代参数化执行。
四份下载单独限制为 16 MiB;下载加完整复制文本合计限制为 32 MiB。即使 SQL 下载已含这段文本,完整复制文本仍额外计入。数据面板仅包含有界统计,完整匹配报告保留在 JSON 下载中。
同一个 10 秒绝对期限包含校验、读取、回调、Worker 加载和最终结果发布;同步阻塞不会延长期限,输入保留供重试。
| 证据 | 检查 |
|---|---|
| Originals | 完整原字节与哈希 |
| Bindings | 严格类型及每处重复使用 |
| Preview | 诊断标识与完整文本 |
| Limits | 拒绝为原子行为;恢复保留输入身份 |
- 保存四份完整下载,同时保留原命令和参数 JSON。
- 完整复制文本与下载字节分开计入;有界数据面板不代表完整匹配报告。
- 超时后,使用相同原文件和绑定值重试。
参考资料
- SQL 命令与参数分别记录
完整原问、七个回答与两条作者反馈已读。作者接受解释与分别记录的方式;浏览器意图和市场规模未知。
- Microsoft T-SQL 常量
单引号双写、Unicode 的大写 N 前缀,以及 bit 和十进制值的规范。
- ANTLR T-SQL 词法文法
固定版本的原版生成 lexer,补验 COMMENT token 的嵌套不变量与未闭合 token 回退;词法诊断不校验 SQL 语句。
本分类工具使用说明
展开工具,查看操作步骤、可调选项和支持范围,再直接进入工作区。
SQL 参数诊断展开将有类型的 T-SQL 参数展开为诊断文本,并核对每一处绑定。
保留原始 T-SQL 命令与有类型的参数 JSON,生成完整诊断预览及匹配报告。SQL 驱动实际分别传送命令和参数。
操作步骤
- 粘贴原命令或选择一份本地 UTF-8 .sql 文件。
- 粘贴完整有类型的参数 JSON,并明确选择名称匹配方式。
- 生成预览,检查重复引用、缺失名称错误与未使用绑定。
- 复制完整诊断或保存四份输出,与真实应用日志一起保留原件。
可调选项
- 参数名称匹配
- 精确拼写 · 忽略 ASCII 字母大小写
明确选择精确匹配或仅折叠 ASCII 字母大小写;数据库排序规则未知。
能力与限制
- 粘贴命令或选择最多一份严格 UTF-8 文件,最多 256 KiB。文件仅替换命令输入框,第二输入框仍保留有类型的参数 JSON,最多 1 MiB。原始文件名标签最多 512 UTF-8 字节,不代表操作系统允许的文件名长度。
- 根对象只含 parameters 数组;每项必须恰有 name、type、value。支持 Unicode 标量字符串、JSON 整数 token 表示的有符号 32 位 int、用规范十进制字符串表示且精度与小数位均不超过 38 的 decimal、严格 JSON boolean 和 null。未知类型或元数据会拒绝。
- 最多 1,000 个唯一绑定;名称含 @ 最多 128 个 UTF-16 单位;每个字符串值最多 65,536 UTF-8 字节。名称须是完整成熟 LOCAL_ID token,不能以 @@ 开始。默认精确匹配,可选的大小写折叠仅作用于 ASCII A–Z。
- 仅展开代码区完整参数 token。字符串、双引号或方括号标识符、行注释及合法嵌套块注释保持原样;@@ 系统引用保持原样并完整报告。未闭合 token、缺失绑定及解码后的重复元数据或名称会拒绝整次操作。
- 最多 100,000 个成熟 lexer token、20,000 个参数与系统引用总和。完整诊断 SQL 最多 8 MiB、完整报告最多 4 MiB;不会输出采样或截断结果。病理输入可能先达到 10 秒的一次性 Worker 期限。
- 每份输入最多移除一处开头 BOM 供解析,记录并在原件中保留;拒绝错误 UTF-8 与未配对代理码。页面预览前 4,000 个码点,复制与下载保留全部结果字节。
- 报告保留全部有类型的值、字面量、每处引用来源位置、系统引用、未使用绑定、源文件名、SHA256、字节数及匹配方式。不会连接数据库、校验 SQL 语句、分析变量声明作用域、推断数据库排序规则或模拟驱动长度与精度强制转换,也不会执行命令。诊断不能替代参数化执行。
- 四份下载单独限制为 16 MiB;下载加完整复制文本合计限制为 32 MiB。即使 SQL 下载已含这段文本,完整复制文本仍额外计入。数据面板仅包含有界统计,完整匹配报告保留在 JSON 下载中。
- 同一个 10 秒绝对期限包含校验、读取、回调、Worker 加载和最终结果发布;同步阻塞不会延长期限,输入保留供重试。