Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

sqlcmd does not handle/honor the command timeout (-t) flag properly on Linux

Đang mở
#605 0 bình luận 4 reaction 2 người được giao Xem trên GitHub

@dlevy-msft-sql đang làm issue này rồi.

Từ ngày 31/1/2026.

  • #682 của @copilot-swe-agent — đã đóng, không merge
  • #702 của @dlevy-msft-sql — đang mở

Đánh giá

Issue này chưa được đánh giá.

Mô tả

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
  1. Create the test table in a database named dba

  2. Run the Blocker DML with the ROLLBACK commented out from SSMS. This will block all operations on the table. Using something like sp_WhoIsActive you should be able to verify that we now have a sleeping session with an open transaction for this.

  3. Run sqlcmd script 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>
  1. Run the sqlcmd script below on a Linux system in bash. You will notice that the SQL "Timeout expired" message will appear after 1 second, but sqlcmd does 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

$
  1. Make sure you uncomment and execute the ROLLBACK in the SQL script to complete that transaction.
Ngôn ngữ chính
Go
Star
601
Fork
91
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

  • Có Dockerfile hoặc tệp Docker Compose
  • Không có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của microsoft/go-sqlcmd

Tất cả issue của microsoft/go-sqlcmd

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.