มีแนวคิดของ "รวมไฟล์" ใน SQL Server หรือไม่?


19

ฉันมีชุดของสคริปต์ที่ต้องทำงานในลำดับที่แน่นอน ฉันต้องการสร้าง "ไฟล์หลัก" ซึ่งแสดงรายการไฟล์อื่นทั้งหมดและลำดับที่ถูกต้อง โดยทั่วไปชอบไฟล์รวมจาก C ++ หรือ ASP / VBScript

คำตอบ:


19

หากคุณใช้SQLCMDคุณสามารถใช้:r FileNameเพื่อรวมไฟล์. sql แยกต่างหาก

: r FileName

วิเคราะห์คำสั่ง T-SQL เพิ่มเติมและคำสั่ง SQLCMD จากไฟล์ที่ระบุโดย FileName ลงในแคชคำสั่ง ชื่อไฟล์ถูกอ่านสัมพันธ์กับไดเรกทอรีเริ่มต้นสำหรับ Visual Studio ไฟล์ถูกอ่านและดำเนินการหลังจากพบชุดแบตเตอร์ปลายทาง คุณสามารถออกคำสั่งหลายคำสั่งได้ ไฟล์สามารถรวมคำสั่ง SQLCMD ใด ๆ รวมถึงแบทช์เทอร์มิเนเตอร์ที่กำหนดไว้ในเครื่องมือตัวเลือก คุณสามารถใช้: r ในสคริปต์ก่อนการปรับใช้หรือหลังการปรับใช้เพื่อรวมสคริปต์อื่น ๆ


คุณใช้คุณสมบัตินี้ด้วยตัวเองหรือไม่?
bernd_k

ฉันใช้มันอย่างหนักในโครงการเครื่องมือข้อมูลเซิร์ฟเวอร์ SQL มันช่วยได้จริงเมื่อฉันพยายามจัดระเบียบข้อมูลตัวอย่างที่ทำงานเป็นสคริปต์โพสต์
Jonathan Allen

4

ในความรู้สึกของตัวประมวลผลล่วงหน้าโบราณC ไม่แน่นอน

  • T-SQL ด้วยตัวเองไม่มีแนวคิดดังกล่าว
  • sqlcmd และ sqlcmdmode ของ SSMS ไม่จัดการพา ธ ของไฟล์ที่เกี่ยวข้อง
  • sqlcmd และ sqlcmdmode ของ SSMS ไม่รองรับเงื่อนไขรวมถึง

หากคุณมีชุดของไฟล์ที่มีพา ธ สัมบูรณ์ที่กำหนดซึ่งคุณต้องการรวมไว้ในลำดับที่ไม่มีเงื่อนไขคุณสามารถใช้เครื่องมือบรรทัดคำสั่ง sqlcmd หรือใช้ SSMS ใน sqlcmdmode ดังกล่าวโดย @mfredrickson และ @Marian


แต่ถ้าคุณต้องการเส้นทางสัมพัทธ์หรือการรวมเงื่อนไขคุณต้องใช้ wrapper บางตัวเรียก sqlcmd (หรือหนึ่งในผู้ทำหน้าที่คัดค้าน isql หรือ osql รุ่นก่อน ๆ )

ขณะนี้ที่งานของฉันในสถานการณ์นี้ฉันกำลังตรวจสอบและขยายรหัส vbs และ hta เก่า ฉันไม่ได้มีความสุขอย่างสมบูรณ์ แต่เป็นการตัดสินใจที่จริงจัง มันใช้งานได้และผู้ใช้อยู่ที่บ้านด้วย hta GUI และไม่จำเป็นต้องติดตั้งซอฟต์แวร์เพิ่มเติม

สำหรับการออกแบบใหม่ฉันจะเริ่มคิดถึงการใช้ WPF และ PowerShell เพื่อตัดการโทรของ sqlcmd แต่ด้วยลูกค้าปัจจุบันของเราฉันไม่สามารถเข้าใจว่ามี PowerShell V2 อยู่

ในสมัยก่อนแม้เราจะเขียนชุดคำสั่งแบบธรรมดาสำหรับจุดประสงค์นี้เรายังคงใช้งานได้บางส่วน

ฉันเดาว่ามีเครื่องมือในปัจจุบันโดยเฉพาะอย่างยิ่งการกำหนดเป้าหมายเวิร์กโฟลว์ซึ่งอาจเหมาะสมที่นี่ ฉันไม่คุ้นเคยกับสิ่งเหล่านั้น


3

พร้อมกับโหมด SQLCMDใน Studio จัดการคุณยังสามารถใช้ไฟล์แบตช์เพื่อใช้เป็นไฟล์หลักในการจัดและเรียกไฟล์ SQL ทั้งหมดของคุณโดยใช้ยูทิลิตี้ SQLCMD

โหมด SQLCMD เป็นการจำลองการใช้งานยูทิลิตี้ภายใน Management Studio ดังนั้นจึงไม่มีความแตกต่างระหว่างโหมด ยกเว้นบางครั้งฉันชอบเรียกใช้ชุดงาน (ไม่มีการเปิด M Studio เพิ่มเติม ... โหลด db ที่ถูกต้อง ... ฯลฯ ) ฉันชอบกำหนดค่าทุกอย่างในแบตช์รวมถึงไฟล์เอาต์พุต


2

ฉันยอมรับตัวประมวลผลล่วงหน้า T-SQL เป็นสิ่งจำเป็นอย่างยิ่ง ฉันพัฒนาตัวเองใน C # ซึ่งใช้เวลาเหมือนชั่วโมง นอกเหนือจากการควบคุมลำดับการดำเนินการของสคริปต์ SQL แล้วยังช่วยให้ฉันมีมาโครที่ดูเหมือน UDFs แบบสเกลาร์และใช้งานได้สะดวก แต่ทำงานได้เร็วเท่ากับ UDF แบบอินไลน์


+1 - ฉันทำสิ่งนั้นด้วยเครื่องมือสร้างแรงบันดาลใจหลายครั้ง แม้ว่า sqlcmd มีสิ่งอำนวยความสะดวกบางอย่างสำหรับการทดแทนตัวแปรฉันจะให้คนที่นำมาใช้เป็นปลั๊กอิน pre-processor แมโครที่ดีสำหรับ SSMS จูบที่ด้านล่าง
ConcOfOfTunbridgeWells

1
@AK คุณจะอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้อีกหรือไม่? อาจจะโพสต์รหัสบน gitHub?
craig

2

ฉันชอบคำตอบของ bernd_k คุณสามารถใช้ SQL Server PowerShell (SQLPS) ได้ขึ้นอยู่กับว่าคุณตั้งชื่อสคริปต์ของคุณอย่างไรถ้าคุณใช้ SQL Server 2008 ขึ้นไป แม้ว่าคุณจะใช้ SQL 2005 คุณก็สามารถใช้ PowerShell และ SMO สำหรับปี 2005 ได้

หมายเหตุด้านข้าง: ฉันเชื่อว่า SQLCMD ในที่สุดจะถูกวางลงในรายการที่คิดค่าเสื่อมราคาและจะถูกแทนที่ด้วย SQLPS, PowerShell

มีตัวเลือกอื่น ๆ ด้วยเช่นกัน

  1. ตั้งค่าแต่ละสคริปต์เป็นขั้นตอนในงาน SQL Agent คุณสามารถกำหนดลำดับที่จะดำเนินการได้
  2. สร้างแพ็คเกจ SSIS เพื่อโทรแต่ละไฟล์ สิ่งนี้สามารถให้การควบคุมได้มากกว่าและมีตัวเลือกการบันทึกเพิ่มเติมอีกเล็กน้อย ฉันชอบวิธีนี้หากผลลัพธ์ของสคริปต์หนึ่งจำเป็นต้องได้รับการตรวจสอบก่อนดำเนินการครั้งต่อไป

ฉันไม่คิดว่า SQLCMD จะถูกคิดค่าเสื่อมราคาเพราะมันมีความสำคัญต่อการทำงานของเครื่องมือ SQL Server Data Tools และ DACPACs
Jonathan Allen

@JonathanAllen หากคุณเกิดขึ้นพบเอกสารใด ๆ ในปัจจุบันที่แสดงให้เห็นว่าการจัดการ DACPACs ใช้SQLCMDแจ้งให้เราทราบเพราะส่วนใหญ่ของสิ่งลิตรพบคือการอ้างอิง PowerShell ฉันยังไม่เห็นการอ้างอิงที่sqlcmdใช้กับ SSDT ยกเว้นอาจเป็นการเปรียบเทียบ schema แต่ฉันไม่เคยใช้สคริปต์ที่สร้างขึ้น
Shawn Melton

สคริปต์ SSDT เป็นสคริปต์ sqlcmd นี่คือวิธีจัดการกับพารามิเตอร์ทั้งที่ผู้ใช้กำหนดเองและสิ่งต่างๆเช่นชื่อฐานข้อมูล หากคุณต้องการปรับใช้ DACPAC โดยใช้ SqlPackage.exe ลิงค์นี้จะแสดงวิธีการผ่านพารามิเตอร์ sqlcmd msdn.microsoft.com/en-us/…
Jonathan Allen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.