Ký tự ống dẫn có ý nghĩa đặc biệt trong các lệnh hàng loạt, vì vậy nó phải là đã trốn thoát bằng cách sử dụng ký tự dấu mũ. Điều này sẽ hoạt động:
DECLARE @Text AS VARCHAR(100)
DECLARE @Cmd AS VARCHAR(100)
SET @Text = 'Hello world^| '
SET @Cmd ='echo ' + @Text + ' > C:\AppTextFile.txt'
EXECUTE Master.dbo.xp_CmdShell @Cmd
Mặc dù đây thực sự không phải là cách tốt để ghi dữ liệu vào tệp văn bản:thông thường SQL Server không được phép ghi vào thư mục gốc của ổ C:và xp_cmdshell
bị tắt theo mặc định. Tôi khuyên bạn nên xem xét các lựa chọn thay thế như sqlcmd.exe
, bcp.exe
hoặc một tập lệnh nhỏ bằng ngôn ngữ ưa thích của bạn (PowerShell, Perl, Python, bất cứ thứ gì).
Nhìn chung, việc truy vấn dữ liệu từ SQL Server dễ dàng, an toàn và linh hoạt hơn nhiều so với việc đẩy nó ra từ phía máy chủ. Trong trường hợp cụ thể của bạn, có vẻ như bạn muốn ghi ra một tệp được phân tách và bcp.exe
được dành cho mục đích đó
.