มันสมเหตุสมผลไหมที่จะใช้เครื่องหมายวงเล็บของ SQL Server ในโค้ดที่เขียนด้วยมือ?


15

ตัวสร้างโค้ดมักจะง่ายกว่าเมื่อสร้างผลลัพธ์โดยใช้เครื่องหมายวงเล็บของ Microsoft ใหม่ ( []) สำหรับเกือบทุกอย่าง

เมื่อฉันเห็นมันครั้งแรกฉันก็ยังว้าววววววววววววจุติของสัญกรณ์ตัวระบุที่ยกมาค่อนข้างห้าม

เท่าที่ฉันรู้ว่ามันเป็นส่วนเสริมที่เป็นกรรมสิทธิ์จาก Microsoft (หมายถึง Oracle ไม่สนับสนุน)

ดูที่ SQL Server ไม่มีความแตกต่างถ้าคุณกำหนดตารางเช่น

CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]);

หรือ

CREATE TABLE dbo.Table_2 (col1 int, col2 int);

มันเป็นเรื่องของสไตล์ส่วนตัวหรือองค์กร คงเส้นคงวา.

ตอนนี้ถ้าคุณต้องการโยกย้ายฐานข้อมูลของคุณไปยัง Oracle วงเล็บจะไม่มีตัวเลือก

คุณสามารถใช้ตัวระบุที่เสนอราคาแบบเก่า แต่ตัวพิมพ์เล็กและตัวพิมพ์เล็กนั้นทำให้เกิดปัญหามากมาย

เป็นความคิดที่ดีหรือไม่ที่จะลบวงเล็บทั้งหมดออกจากรหัสที่สร้างหลีกเลี่ยงการใช้ช่องว่างตัวอักษรพิเศษอื่น ๆ และคำหลักที่สงวนไว้สำหรับชื่อและรหัสในวิธีที่ DBMS ส่วนใหญ่เข้าใจ

คำตอบ:


12

SQL มาตรฐานใช้เครื่องหมายคำพูดคู่"สำหรับตัวระบุที่ยกมา SQL Server รองรับสิ่งนี้โดยใช้QUOTED_IDENTIFIERตัวเลือก ( ANSI_QUOTESใน mySQL) SQL มาตรฐานช่วยเพิ่มความสะดวกในการพกพาโดยทั่วไปและในกรณีนี้จะพอร์ตกับ Oracle ในทำนองเดียวกันฉันจะเปลี่ยนคำหลัก SQL ไปเป็นตัวพิมพ์ใหญ่ (ความต้องการ SQL-92 ระดับกลาง) และขยายintเป็นINTEGER(ข้อกำหนดระดับรายการ SQL-92)

โดยไม่จำเป็นต้องใช้ตัวระบุที่ยกมา IMO


10

นี่เป็นปัญหาส่วนตัว แต่วงเล็บที่ไม่จำเป็นอยู่ใกล้ด้านบนของรายการสัตว์เลี้ยงของฉัน - น่ารำคาญกว่าการสะกดคำผิดเล็กน้อย "! =" แต่ไม่แย่เท่าเครื่องหมายจุลภาคชั้นนำในรายการคอลัมน์

พูดอย่างเป็นกลางพิจารณาวัตถุประสงค์ของวงเล็บปีกกา: อนุญาตชื่อวัตถุที่ไม่ถูกกฎหมาย จากจุดประสงค์ดังกล่าววงเล็บคือกลิ่นรหัสที่แย่ที่สุดและเป็นเครื่องหมายของความเกียจคร้านที่ดีที่สุด


เครื่องหมายจุลภาคชั้นนำทำให้ชัดเจนยิ่งขึ้นเมื่อมีการเริ่มคอลัมน์ใหม่ วงเล็บไม่ใช่กลิ่นรหัสเนื่องจากชัดเจนว่าชื่อคอลัมน์คืออะไรและไม่ใช่อะไร ฉันไม่ได้บอกว่าคุณต้องใช้พวกเขา แต่บอกว่าพวกเขาระบุว่าปัญหานั้นกว้างไกลเกินเอื้อม
Max Vernon

9
  • ต้องใช้วงเล็บถ้าชื่อตารางหรือคอลัมน์ของคุณ:

    เห็นได้ชัดว่าถ้าคุณสามารถควบคุมสคีมาแล้วหลีกเลี่ยงการใช้ชื่อเช่น อย่างไรก็ตามในบางกรณีชื่อที่ดีที่สุดคือชื่อที่สงวนไว้ (เช่นKEYสำหรับคอลัมน์คีย์ในตารางคีย์ - ค่าทั่วไป) ดังนั้นจึงขึ้นอยู่กับคุณที่จะตัดสินใจว่าคุณต้องการใช้มันแย่แค่ไหน

    ฉันยังใช้วงเล็บเพื่อระงับการเน้นสีฟ้าที่ SSMS และ VS ให้คำหลักบางคำเช่นDESCRIPTIONที่ไม่ได้ถูกสงวนไว้โดย SQL Server แต่อย่างอื่นเป็นพิเศษสำหรับเครื่องมือเหล่านั้น

  • ใช้วงเล็บอย่างแน่นอนเมื่อสร้าง SQL แบบไดนามิก วิธีที่ง่ายในการทำเช่นนั้นคือการโทรหาQUOTENAME()วัตถุที่คุณอ้างอิงแบบไดนามิก (เช่นSELECT QUOTENAME(name) FROM sys.databases;) sp_MSforeachdbยกตัวอย่างเช่นไม่ทำเช่นนี้


6

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


6

ฉันอาจจะไม่ลองใช้ DDL แบบพกพาด้วยซ้ำ ฉันจะดีกว่านี้ถ้าฉันสร้างคำจำกัดความของตาราง Oracle จากมุมมองระบบของ SQL Server ถ้าจำเป็น

ฉันไม่คิดว่ามันสมเหตุสมผลที่จะเขียน DML แบบพกพา - PL / SQL นั้นต่างจาก T-SQL โดยสิ้นเชิง เพื่อความสะดวกในการพกพามันจะง่ายกว่าที่จะเปิดเผยฐานข้อมูลของคุณผ่าน API ของขั้นตอนการจัดเก็บ ลายเซ็นของขั้นตอนเหล่านี้จะต้องเหมือนกันทั้งสองแพลตฟอร์ม แต่การใช้งานสามารถใช้คุณสมบัติที่เป็นกรรมสิทธิ์ - โดยรวมแล้ววิธีนี้ง่ายกว่าการใช้ SQL มาตรฐาน ANSI เท่านั้น

ข้อสรุปนี้ขึ้นอยู่กับประสบการณ์หลายปีในการพัฒนาระบบพกพาซึ่งทำงานได้ทั้ง Oracle และ SQL Server

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