ไม่รวมตารางเฉพาะจากการปรับใช้ SSDT


11

dboฉันมีฐานข้อมูลที่มีอยู่กับทุกอย่างในสคี ฉันมีโครงการ SSDT พร้อมวัตถุที่ฉันเพิ่มด้วยสกีมาfoo

ฉันมีตารางที่มีลักษณะเช่นนี้ในโครงการ:

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)

มันขึ้นอยู่กับ dbo.a dbo.a มีคอลัมน์จำนวนมากซึ่งเป็นคีย์ต่างประเทศไปยังคอลัมน์อื่น ๆ คนอื่น (ผู้ที่รักษาสคีมาเริ่มต้น) อาจเปลี่ยน dbo.a

ฉันต้องการเก็บ dbo.a อย่างง่าย ๆ เป็น:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)

ดังนั้นมันจึงถูกสร้างขึ้นภายใน แต่ไม่ได้ปรับใช้ เป็นไปได้ไหม


คุณไม่ใช้ Schema Compare สำหรับ deploys ของคุณหรือไม่ คุณสามารถยกเลิกการเลือกตารางนั้นจากรายการเมื่อตรวจพบการเปลี่ยนแปลง
เดฟ

ฉันกำลังทำ schema เปรียบเทียบที่ momnent แต่ไม่มีจากแล็ปท็อปของฉันไปยังเซิร์ฟเวอร์ dev ฉันต้องการทำการปรับใช้การเผยแพร่จริง
Justin Dearing

คำตอบ:


11

คุณสามารถใช้ตัวกรอง AgileSqlClub SqlPackage การปรับใช้

คำแนะนำสั้น ๆ ที่ผลิตซ้ำจากบทความต้นฉบับโดยEd Elliott :

  1. ดาวน์โหลดตัวกรองจากagilesqlclub.codeplex.com
  2. ใส่DLLลงในโฟลเดอร์เดียวกันกับsqlpackage.exe
  3. เพิ่มพารามิเตอร์บรรทัดคำสั่งเหล่านี้เพื่อปรับใช้ของคุณ:

    /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

    สิ่งนี้จะไม่ปรับใช้วางหรือเปลี่ยนแปลงอะไรในBLAHสคีมา

ดูบทความต้นฉบับสำหรับรายละเอียดที่สมบูรณ์


เมื่อฉันปรับใช้จาก devenv.exe ผ่านไฟล์ foo.publish.xml มันจะไม่เกิด sqlpackage.exe มีวิธีที่ฉันสามารถทำได้หรือไม่?
Justin Dearing

สิ่งที่ฉันทำคือไม่เคยใช้ devenv เพื่อปรับใช้การเปลี่ยนแปลงแทนที่จะสร้างโครงการและใช้สคริปต์เพื่อขับ sqlpackage.exe - วิธีนี้คุณสามารถทำสิ่งต่าง ๆ เช่นใช้งานผู้ปรับใช้ได้อย่างง่ายดายและทดสอบสคริปต์เดียวกันกับที่คุณสามารถใช้ในสภาพแวดล้อมอื่น ๆ ในกระบวนการของคุณ!
Ed Elliott

นี่เป็นความช่วยเหลือที่ยิ่งใหญ่สำหรับฉันฉันจำเป็นต้องปรับใช้สคีมาเฉพาะ หมายเหตุสำหรับคนอื่น ๆ ในอนาคตเมธอด ignoreschema สามารถใช้ใน regex IgnoreSchema (^ (?! \ b (? i) BLAH \ b). *) เพื่อละเว้นทุกอย่างยกเว้นสกีมา BLAH
andyb952

3

การจัดการเฉพาะบางส่วนของฐานข้อมูลด้วยSSDTเป็นเรื่องยาก หากไม่มีการขึ้นต่อกันคุณสามารถไม่อนุญาตให้วางวัตถุและไม่รวมในโครงการ เนื่องจากมีการพึ่งพา แต่คุณไม่ต้องการจัดการพวกเขาฉันคิดว่าคุณจะต้องหลอกลวงระบบ

วิธีการหนึ่งมาถึงใจฉันไม่สามารถทดสอบพวกเขาได้ในขณะนี้และฉันใช้วิธี "ที่คล้ายกัน" กับสิ่งนี้เท่านั้นไม่ใช่วิธีนี้อย่างแน่นอน

ตัวเลือกที่ 1:

  1. สร้างโครงการฐานข้อมูลใหม่ที่มีdbo.aอยู่ในนั้น

  2. อ้างอิงตารางด้วยการตั้งชื่อ 3 ส่วน สำหรับส่วนแรกของชื่อใช้ตัวแปร SQLCMD เช่น[$(DatabaseName)].dbo.a.

  3. อย่าปรับใช้fooฐานข้อมูลของคุณ

  4. ผ่านไฟล์เผยแพร่หรือส่วนต่อประสาน cli ให้$(DatabaseName)ใช้ชื่อเดียวกันกับฐานข้อมูลจริงของคุณ


จะลองสิ่งนี้
Justin Dearing

@JustinDearing ใช้วิธีการกรองการปรับใช้มันเหมาะกับกรณีการใช้งานของคุณ (เช่นเก็บตารางทั้งหมดไว้ในแหล่งที่มาของการควบคุมและไม่สนใจการปรับใช้)
Ed Elliott

0

วิธี "built-in" แบบสะอาดในการทำเช่นนี้ (ณ ปี 2016) กำลังใช้ไฟล์ Schema Compare ที่บันทึกไว้ คุณสามารถ:

  1. ดำเนินการเปรียบเทียบ Schema ของคุณ (จากโครงการฐานข้อมูลของคุณ -> เซิร์ฟเวอร์เป้าหมาย) และยกเลิกการเลือกวัตถุใด ๆ ที่คุณต้องการยกเว้นสำหรับการอัปเดต
  2. บันทึก Schema ของคุณเปรียบเทียบกับไฟล์ * .scmp
  3. คุณสามารถคัดลอกและวางไฟล์. scmp เพื่อสร้างเวอร์ชันสำหรับสภาพแวดล้อมที่แตกต่างกันหากจำเป็นและเพียงแก้ไขในตัวแก้ไข XML เพื่อเปลี่ยนแหล่งที่มา (เพื่อชี้ไปที่สร้างไฟล์ dacpac เอาต์พุต) การเชื่อมต่อ ฯลฯ หรือแม้กระทั่งเพิ่ม / แก้ไขรายการด้วยตนเอง .
  4. กำหนดค่าพารามิเตอร์คำสั่งการปรับใช้ dacpac / เผยแพร่ของคุณเพื่อใช้ไฟล์. scmp ที่เหมาะสมสำหรับการเผยแพร่ เช่น SqlPackage.exe / การกระทำ: เผยแพร่ /SourceFile:c:\project\schema_compare.scmp

ข้อมูลเพิ่มเติมที่นี่: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.