ฉันจะส่งออกผลลัพธ์แบบสอบถามไปยังไฟล์. csv ใน SQL Server 2008 ได้อย่างไร
ฉันจะส่งออกผลลัพธ์แบบสอบถามไปยังไฟล์. csv ใน SQL Server 2008 ได้อย่างไร
คำตอบ:
นี่เป็นเวอร์ชันเต็มของภาพด้านล่าง
นี่จะแสดงผลลัพธ์การสืบค้นของคุณเป็นข้อความที่คั่นด้วยจุลภาค
หากต้องการบันทึกผลลัพธ์ของแบบสอบถามลงในไฟล์: Ctrl + Shift + F
Ctrl+Shift+F
จะเปลี่ยนเฉพาะโหมดเอาต์พุตเท่านั้นจะไม่มีผลต่อผลลัพธ์หากคุณเรียกใช้คิวรีแล้ว เพื่อให้สิ่งนี้สะท้อนออกมาคุณต้องเรียกใช้แบบสอบถามอีกครั้ง เมื่อคุณรันในโหมด "Results to File" มันควรจะพร้อมท์ให้คุณทราบว่าคุณต้องการบันทึกผลลัพธ์ไว้ที่ไหน
ฉันรู้ว่ามันค่อนข้างเก่า แต่นี่เป็นวิธีที่ง่ายกว่ามาก ...
เรียกใช้คิวรีของคุณด้วยการตั้งค่าเริ่มต้น (กำหนดผลลัพธ์ในรูปแบบกริดหากรายการของคุณไม่อยู่ในรูปแบบกริดดูด้านล่าง)
คลิกขวาที่ผลลัพธ์ของกริดและคลิก "บันทึกผลลัพธ์เป็น" และบันทึก
หากผลลัพธ์ของคุณไม่อยู่ในรูปแบบกริดให้คลิกขวาที่ตำแหน่งที่คุณเขียนแบบสอบถามวางตัว "Results To" แล้วคลิก "Results To Grid"
ระวังให้ดีอย่าจับหัวคอลัมน์!
โชคดี!
คุณสามารถใช้ PowerShell
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(แต่ไม่จำเป็นต้อง snap ใน Cmdlets เหล่านั้น) Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
นอกจากนี้ผมต้องการบันทึกคำสั่งในสคริปต์ซึ่งจะไม่ทำงานจนกว่าฉันจะเปลี่ยนแปลงนโยบายการดำเนินการ:
RemoteSigned
นโยบายการดำเนินการจะเพียงพอ
หากฐานข้อมูลที่เป็นปัญหาในท้องถิ่นข้อมูลต่อไปนี้อาจเป็นวิธีที่มีประสิทธิภาพที่สุดในการส่งออกผลลัพธ์แบบสอบถามไปยังไฟล์ CSV (นั่นคือช่วยให้คุณควบคุมได้มากที่สุด)
หลังจากผ่านกระบวนการนี้อย่างละเอียดถี่ถ้วนฉันพบว่าสิ่งต่อไปนี้เป็นตัวเลือกที่ดีที่สุด
สคริปต์ 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
เรียกใช้ PowerShell ในฐานะผู้ดูแลระบบ
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
MS Excel -> ข้อมูล -> แบบสอบถามใหม่ -> จากฐานข้อมูล .. ทำตามขั้นตอน
จากคำตอบของ NS ฉันมีสคริปต์ PowerShell ที่ส่งออกไปยังไฟล์ CSVโดยมีเครื่องหมายคำพูดล้อมรอบฟิลด์และคั่นด้วยเครื่องหมายจุลภาคและจะข้ามข้อมูลส่วนหัวในไฟล์
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"
สองบรรทัดแรกเปิดใช้งานความสามารถในการใช้คำสั่งInvoke-SqlCmd
ใช้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
แต่มีข้อแม้อยู่สองสามข้อ:
คุณต้องมีผู้ให้บริการ Microsoft.ACE.OLEDB.12.0 ผู้ให้บริการ Jet 4.0 ก็ใช้งานได้เหมือนกัน แต่มันเก่าแก่ดังนั้นฉันจึงใช้มันแทน
ไฟล์. CSV จะต้องมีอยู่แล้ว หากคุณใช้ส่วนหัว ( HDR=YES
) ตรวจสอบให้แน่ใจว่าบรรทัดแรกของไฟล์. CSV เป็นรายการที่คั่นด้วยฟิลด์ทั้งหมด
การใช้เทคนิค Studio จัดการเซิร์ฟเวอร์ SQL ดั้งเดิมเพื่อส่งออกเป็น CSV (ตามที่แนะนำ @ 8kb) จะไม่ทำงานหากค่าของคุณมีเครื่องหมายจุลภาคเนื่องจาก SSMS ไม่ตัดค่าในเครื่องหมายคำพูดคู่ วิธีที่มีประสิทธิภาพมากขึ้นสำหรับฉันก็คือคัดลอกผลลัพธ์ (คลิกภายในตารางจากนั้นกด CTRL-A, CTRL-C) แล้ววางลงใน Excel จากนั้นบันทึกเป็นไฟล์ CSV จาก Excel
คุณสามารถใช้ QueryToDoc ( http://www.querytodoc.com ) มันช่วยให้คุณเขียนแบบสอบถามกับฐานข้อมูล SQL และส่งออกผลลัพธ์ - หลังจากที่คุณเลือกตัวคั่น - ไปยัง Excel, Word, HTML หรือ 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
เป็น @Slogmeister Extraordinaire Quoted ถูกต้อง
จำเป็นต้องมี 1> ไฟล์มีอยู่แล้วในคอลัมน์ 2> จำเป็นต้องติดตั้ง Office
พบข้อผิดพลาด
ข่าวสารเกี่ยวกับ 7303 ระดับ 16 สถานะ 1 บรรทัด 1 ไม่สามารถเริ่มต้นวัตถุแหล่งข้อมูลของผู้ให้บริการ OLE DB "Microsoft.ACE.OLEDB.12.0" สำหรับเซิร์ฟเวอร์ที่เชื่อมโยง "(null)"
32 บิตhttp://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exeแบบ 32 บิต
ข่าวสารเกี่ยวกับ 15281 ระดับ 16 สถานะ 1 สาย 1 SQL Server บล็อกการเข้าถึงงบ 'OpenRowset / OpenDatasource' ของคอมโพเนนต์ 'Ad Hoc Distributed Queries' เนื่องจากคอมโพเนนต์นี้ถูกปิดเป็นส่วนหนึ่งของการกำหนดค่าความปลอดภัยสำหรับเซิร์ฟเวอร์นี้ ผู้ดูแลระบบสามารถเปิดใช้งาน 'การค้นหาแบบกระจายเฉพาะกิจ' โดยใช้ sp_configure สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปิดใช้งาน 'แบบสอบถามแบบกระจาย Ad Hoc' ค้นหา 'แบบสอบถามแบบกระจายแบบเฉพาะกิจ' ใน SQL Server Books Online
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
หากคุณไม่ต้องการใช้ Powershell คำตอบนี้เป็นคำตอบที่ยอดเยี่ยมของ 8kb ข้อแตกต่างเพียงอย่างเดียวคือแทนที่จะเลือก CSV เป็นรูปแบบผลลัพธ์ให้เลือก Tab Delimited วิธีนี้ถ้ามีเครื่องหมายจุลภาคในข้อมูลของคุณมันจะไม่ข้ามเซลล์ใน Excel นอกจากนี้หากคุณตั้งค่าตัวคั่นเริ่มต้นของ Excel เป็นแท็บคุณสามารถทำสำเนาผลการสืบค้น SSMS ทั้งหมด (CTRL-A, CTRL-C) และวางลงใน Excel (ไม่จำเป็นต้องบันทึกเป็นไฟล์และนำเข้าไปยัง Excel ):
ตอนนี้คุณสามารถดำเนินการค้นหาของคุณจากนั้นทำ CTRL-A เพื่อเลือกผลลัพธ์ทั้งหมดแล้วกด CTRL-C เพื่อคัดลอกไปยังคลิปบอร์ดแล้วเปลี่ยนไปใช้ Excel 2013 (อาจใช้งานได้ในปี 2007 เช่นกันไม่แน่ใจ) และวาง - สมมติว่าเป็นค่าเริ่มต้นของ Excel ตัวคั่นถูกตั้งค่าเป็นแท็บ
ใช่สิ่งเหล่านี้เป็นไปได้เมื่อคุณมีการเข้าถึงเซิร์ฟเวอร์โดยตรง แต่ถ้าคุณมีสิทธิ์เข้าถึงเซิร์ฟเวอร์จากเว็บ / แอพพลิเคชันเซิร์ฟเวอร์เท่านั้น สถานการณ์เป็นแบบนี้กับพวกเรามานานแล้วและทางออกก็คือ SQL Server ส่งออกเป็น CSV