Làm cách nào tôi có thể xuất kết quả truy vấn sang tệp .csv trong SQL Server 2008?
Làm cách nào tôi có thể xuất kết quả truy vấn sang tệp .csv trong SQL Server 2008?
Câu trả lời:
Đây là phiên bản toàn màn hình của hình ảnh đó, bên dưới
Điều này sẽ hiển thị kết quả truy vấn của bạn dưới dạng văn bản được phân cách bằng dấu phẩy.
Để lưu kết quả của truy vấn vào một tệp: Ctrl + Shift + F
Ctrl+Shift+F
, nó chỉ thay đổi chế độ đầu ra, nó không ảnh hưởng đến kết quả nếu bạn đã chạy truy vấn. Để điều này được phản ánh, bạn phải chạy lại truy vấn. Khi bạn chạy nó trong chế độ "Kết quả thành tệp", nó sẽ nhắc bạn về nơi bạn muốn lưu kết quả.
Tôi biết điều này hơi cũ, nhưng đây là một cách dễ dàng hơn nhiều ...
Chạy truy vấn của bạn với cài đặt mặc định (đặt kết quả ở định dạng lưới, nếu của bạn không ở định dạng lưới, xem bên dưới)
Nhấp chuột phải vào kết quả lưới và nhấp vào "Lưu kết quả dưới dạng" và lưu nó.
Nếu kết quả của bạn không ở định dạng lưới, nhấp chuột phải vào nơi bạn viết truy vấn, di chuột "Kết quả đến" và nhấp vào "Kết quả vào lưới"
Hãy lưu ý rằng bạn KHÔNG chụp các tiêu đề cột!
Chúc may mắn!
Bạn có thể sử dụng PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
và Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(nhưng không cần phải cài vào các Cmdlets đó). Ngoài ra, tôi đã lưu các lệnh trong một tập lệnh, sẽ không chạy cho đến khi tôi thay đổi chính sách thực thi : Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
chính sách thực thi sẽ đủ.
Nếu cơ sở dữ liệu được đề cập là cục bộ, thì đây có lẽ là cách mạnh mẽ nhất để xuất kết quả truy vấn sang tệp CSV (nghĩa là cung cấp cho bạn quyền kiểm soát nhiều nhất).
Sau khi trải qua quá trình này một cách triệt để, tôi thấy sau đây là lựa chọn tốt nhất
Tập lệnh PowerShell
$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**"
$AttachmentPath = "c:\\export.csv"
$QueryFmt= @"
**YOUR_QUERY_WITHOUT_STARS**
"@
Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation
Chạy PowerShell với tư cách quản trị viên
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Dựa trên câu trả lời của NS, tôi có tập lệnh PowerShell xuất sang tệp CSV có dấu ngoặc kép quanh trường và được phân tách bằng dấu phẩy và nó bỏ qua thông tin tiêu đề trong tệp.
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$qry = @"
Select
*
From
tablename
"@
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
Hai dòng đầu tiên cho phép khả năng sử dụng lệnh Invoke-SqlCmd .
Sử dụng T-SQL :
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
Nhưng, có một vài cảnh báo:
Bạn cần phải có nhà cung cấp Microsoft.ACE.OLEDB.12.0. Nhà cung cấp Jet 4.0 cũng sẽ hoạt động, nhưng nó đã cũ, vì vậy tôi đã sử dụng cái này thay thế.
Tệp .CSV sẽ phải tồn tại. Nếu bạn đang sử dụng các tiêu đề ( HDR=YES
), hãy đảm bảo dòng đầu tiên của tệp .CSV là danh sách được phân tách của tất cả các trường.
Sử dụng kỹ thuật SQL Server Management Studio để xuất sang CSV (như @ 8kb đã đề xuất) sẽ không hoạt động nếu giá trị của bạn chứa dấu phẩy, vì SSMS không bao bọc các giá trị trong dấu ngoặc kép. Một cách hiệu quả hơn đối với tôi là chỉ cần sao chép kết quả (nhấp vào bên trong lưới và sau đó là CTRL-A, CTRL-C) và dán nó vào Excel. Sau đó lưu dưới dạng tệp CSV từ Excel.
Bạn có thể sử dụng QueryToDoc ( http://www.querytodoc.com ). Nó cho phép bạn viết một truy vấn đối với cơ sở dữ liệu SQL và xuất kết quả - sau khi bạn chọn dấu phân cách - sang Excel, Word, HTML hoặc CSV
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
như @Slogmeister Extraordinaire Trích dẫn là chính xác.
Một cần phải có 1> Tệp đã có sẵn với các cột 2> Một cần phải cài đặt Office
Lỗi phải đối mặt
Msg 7303, Cấp 16, Trạng thái 1, Dòng 1 Không thể khởi tạo đối tượng nguồn dữ liệu của nhà cung cấp OLE DB "Microsoft.ACE.OLEDB.12.0" cho máy chủ được liên kết "(null)". "
32 bit http://doad.microsoft.com/doad/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe
Msg 15281, Cấp 16, Trạng thái 1, Máy chủ SQL Dòng 1 đã chặn quyền truy cập vào TÌNH TRẠNG 'OpenRowset / OpenDatasource' của thành phần 'Truy vấn phân phối quảng cáo' vì thành phần này bị tắt như một phần của cấu hình bảo mật cho máy chủ này. Quản trị viên hệ thống có thể cho phép sử dụng 'Truy vấn phân phối quảng cáo' bằng cách sử dụng sp_cool. Để biết thêm thông tin về việc bật 'Truy vấn phân phối Ad Hoc', hãy tìm kiếm 'Truy vấn phân tán Ad Hoc' trong Sách dành cho máy chủ SQL trực tuyến.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Nếu bạn không muốn sử dụng Powershell, câu trả lời này là một biến thể của câu trả lời tuyệt vời của 8kb. Sự khác biệt duy nhất là thay vì chọn CSV làm định dạng đầu ra, hãy chọn Phân cách tab. Bằng cách này nếu có dấu phẩy trong dữ liệu của bạn, nó sẽ không bỏ qua các ô trong Excel. Ngoài ra, nếu bạn đã đặt dấu phân cách mặc định của Excel thành các tab, bạn chỉ cần sao chép tất cả các kết quả truy vấn SSMS (CTRL-A, CTRL-C) và dán vào Excel (không cần lưu dưới dạng tệp và nhập vào Excel ):
Bây giờ bạn có thể thực hiện truy vấn của mình, sau đó thực hiện CTRL-A để chọn tất cả các kết quả, sau đó CTRL-C để sao chép vào bảng tạm, sau đó chuyển sang Excel 2013 (cũng có thể hoạt động vào năm 2007) và dán - giả sử mặc định của Excel dấu phân cách được đặt thành tab.
Có, tất cả những điều này là có thể khi bạn có quyền truy cập trực tiếp vào máy chủ. Nhưng nếu bạn chỉ có quyền truy cập vào máy chủ từ máy chủ web / ứng dụng thì sao? Vâng, tình hình đã xảy ra với chúng tôi từ lâu và giải pháp là SQL Server Xuất sang CSV .