sqlcmd does not handle/honor the command timeout (-t) flag properly on Linux
@dlevy-msft-sql 已经在做这个了。
开始于 2026年1月31日。
评估
这个 Issue 还没有评估数据。
描述
sqlcmd does not properly handle/honor the SQL Command Timeout (-t) flag properly on Linux. It works fine on Windows but the command always "hangs" for ~10 minutes before finally exiting when run on a Linux system .
Testing Setup
Test Table
USE [dba]
GO
CREATE TABLE [dbo].[DBScriptTable](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[placeName] [varchar](100) NULL,
PRIMARY KEY CLUSTERED ([id] ASC)
) ON [PRIMARY]
GO
Blocker DML
This script will create an open transaction against the above table with SERIALIZABLE transaction isolation level. Running it without completing the transaction will essentially block all operations on the table until the script is either rolled back or committed. That's why the ROLLBACK is commented out here.
-- This should be run from within SSMS so you can control the transaction
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;
BEGIN TRANSACTION
INSERT INTO DBscriptTable (placeName) VALUES ('Redmond, Washington') ;
--ROLLBACK TRANSACTION
Test DML
Simple select to use for our sqlcmd tests
-- Save as test.sql
SELECT * FROM DBScriptTable
GO
How to replicate this behavior
-
Create the test table in a database named
dba -
Run the Blocker DML with the
ROLLBACKcommented out from SSMS. This will block all operations on the table. Using something likesp_WhoIsActiveyou should be able to verify that we now have a sleeping session with an open transaction for this. -
Run
sqlcmdscript below in PowerShell on Windows 11. You will notice that this script will return immediately after the command timeout of 1 second
PS> get-date; sqlcmd -S "<redacted>" -U "<redacted>" -P "<redacted>" -i ./test.sql -d dba -t 1; get-date
Tuesday, August 12, 2025 10:20:26 AM
Timeout expired
Tuesday, August 12, 2025 10:20:27 AM
PS>
- Run the
sqlcmdscript below on a Linux system inbash. You will notice that the SQL "Timeout expired" message will appear after 1 second, butsqlcmddoes not return us to a bash prompt for 10 minutes. I'm not exactly sure what it's waiting on here and this is the unexpected behavior.
$ date; sqlcmd -S "<redacted>" -U "<redacted>" -P "<redacted>" -i ./test.sql -d dba -t 1; date
Tue Aug 12 10:19:56 EDT 2025
Timeout expired
Tue Aug 12 10:29:57 EDT 2025
$
- Make sure you uncomment and execute the
ROLLBACKin the SQL script to complete that transaction.
- 主要语言
- Go
- 星标
- 601
- 派生
- 91
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
microsoft/go-sqlcmd 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 72/100
-
难度 3/5 1-2 天 新手友好度 55/100
-
难度 3/5 1-2 天 新手友好度 65/100
-
-r discards the "Msg N, Level N, State N" error header — errors on stderr lose message number and line info可能重新可做 关联的 PR 已关闭且未合并。 未关闭
难度 3/5 1-2 天 新手友好度 76/100
查看 microsoft/go-sqlcmd 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 75/100
prime-radiant-inc/evener#4223 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
open-telemetry/opentelemetry-go-compile-instrumentation#1467 ·
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 1 天内回复
-
bug
难度 1/5 1 小时以内 新手友好度 72/100
维护者通常 1 天内回复
-
a:bug
难度 2/5 1-3 小时 新手友好度 80/100
gotify/server#1068 · 1 个 reaction ·
维护者通常 2 天内回复