การใช้วงเล็บเหลี่ยม [] ในคำสั่ง sql คืออะไร?


163

ฉันสังเกตว่า Visual Studio 2008 กำลังวางวงเล็บเหลี่ยมรอบชื่อคอลัมน์ใน sql วงเล็บมีข้อได้เปรียบหรือไม่? เมื่อฉันส่งรหัส T-SQL ฉันไม่เคยใส่ใจมันเลย

ตัวอย่าง:

Visual Studio:

SELECT [column1], [column2] etc...

ทางของฉัน:

SELECT column1, column2 etc...

เป็นสิ่งที่ดีที่ SQL ที่เขียนด้วยมือของคุณไม่จำเป็นต้องใช้วงเล็บการตั้งชื่อฐานข้อมูลของคุณควรแยกชื่อที่ต้องใช้วงเล็บ
Christian Oudard

คำตอบที่เกี่ยวข้องอธิบายการตั้งค่า QUOTED_IDENTIFIER: stackoverflow.com/questions/19657101/…
Jared Beck

8
ฉันอาจเพิ่มว่าวงเล็บเป็นมุมแหลมของ Microsoft SQL Standard ใช้เครื่องหมายคำพูดคู่ ( ") จริง ๆซึ่ง Microsoft ก็รองรับเช่นกัน ถ้า Microsoft รู้สึกว่าจำเป็นต้องกำหนดขอบเขตทุกอย่างมันจะดีกว่าถ้าใช้เครื่องหมายคำพูดมาตรฐานแทน แต่ฉันเดาว่ามันจะทำให้การพอร์ตไปยัง DBMS อื่นง่ายเกินไปและนั่นจะไม่ทำ ...
Manngo

คำตอบ:


181

ต้องใช้วงเล็บถ้าคุณใช้คำสำคัญหรือตัวอักษรพิเศษในชื่อคอลัมน์หรือตัวระบุ คุณสามารถตั้งชื่อคอลัมน์[First Name](มีช่องว่าง) - แต่คุณต้องใช้วงเล็บทุกครั้งที่คุณอ้างถึงคอลัมน์นั้น

เครื่องมือที่ใหม่กว่าเพิ่มเข้าไปได้ทุกที่ในกรณีหรือเพื่อความมั่นคง


3
นี่คือจุดประสงค์เดียวของวงเล็บเหลี่ยมหรือไม่

1
@ ฉันดูเหมือนว่าจะเป็นอย่างนั้น แต่ฉันไม่มีข้อมูลอ้างอิงที่ระบุอย่างชัดเจน
Michael Haren

2
เกี่ยวข้อง q: stackoverflow.com/questions/9917196/…
Michael Haren

2
sql ยังใช้วงเล็บเหลี่ยมในตัวดำเนินการคล้ายกันของแบบสอบถามแบบใช้เลือกข้อมูลเพื่อ จำกัด ผลลัพธ์โดยใช้นิพจน์ทั่วไป codeproject.com/Articles/33941/SQL-LIKE-Operator
Jens Frandsen

2
คุณอาจกำหนดชื่อคอลัมน์ที่เรียกว่าselectแต่select select from mytableจะทำให้เกิดข้อผิดพลาดดังนั้นselect [select] from mytableจะทำให้เป็นแบบสอบถามที่ถูกต้อง คำใดก็ตามที่มีสีสันในสตูดิโอจัดการ SQL ของคุณควรล้อมรอบด้วยวงเล็บถ้าคุณต้องการใช้เป็นชื่อคอลัมน์ / ตาราง / sp / ฯลฯ ในคำพูดมุมฉากของ MySQL `` `` จะเทียบเท่ากับสิ่งนี้
Barry Guvenkaya

59

มีประโยชน์ถ้าคอลัมน์ของคุณมีชื่อเหมือนกับคำหลัก SQL หรือมีช่องว่างอยู่

ตัวอย่าง:

create table test ( id int, user varchar(20) )

ไม่นะ! ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก 'ผู้ใช้' แต่นี่:

create table test ( id int, [user] varchar(20) )

ทำงานได้ดี


@Blordbeard นี่เป็นสิ่งที่เฉพาะกับ Microsoft SQL Server หรือวงเล็บเหลี่ยมยังทำงานเหมือนกันสำหรับ Oracle, mySQL, PostgreSQL เป็นต้น?
user3700562

4
วงเล็บไม่ใช่ SQL มาตรฐานไม่แน่ใจว่าตัวอักษรใดที่เอ็นจิน DB ทั้งหมดใช้ ตัวอย่างเช่น: MySQL ใช้ backticks: stackoverflow.com/questions/2889871/…
Blorgbeard ออกเมื่อ

12

มีประโยชน์หากคุณ (ด้วยเหตุผลบางอย่าง) โดยใช้ชื่อคอลัมน์ที่มีอักขระบางตัว

Select First Name From People

จะไม่ทำงาน แต่การใส่วงเล็บเหลี่ยมรอบชื่อคอลัมน์จะใช้งานได้

Select [First Name] From People

กล่าวโดยย่อคือวิธีการประกาศชื่อวัตถุอย่างชัดเจน คอลัมน์ตารางฐานข้อมูลผู้ใช้หรือเซิร์ฟเวอร์


6

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


5

วงเล็บสามารถใช้เมื่อชื่อคอลัมน์เป็นคำสงวน

หากคุณกำลังสร้างคำสั่ง SQL โดยทางโปรแกรมจากการรวบรวมชื่อคอลัมน์ที่คุณไม่ได้ควบคุมคุณสามารถหลีกเลี่ยงปัญหาได้โดยใช้วงเล็บ


5

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

วงเล็บยังมีประโยชน์เมื่อคุณต้องการแทนที่ทั้งหมดในสคริปต์ หากชุดของคุณมีตัวแปรชื่อ @String และคอลัมน์ชื่อ [String] คุณสามารถเปลี่ยนชื่อคอลัมน์เป็น [NewString] โดยไม่ต้องเปลี่ยนชื่อ @String เป็น @NewString


5

ในยุคมืดของ SQL ในปี 1990 มันเป็นแนวปฏิบัติที่ดีเนื่องจากนักออกแบบ SQL พยายามที่จะเพิ่มแต่ละคำในพจนานุกรมเป็นคำสำคัญสำหรับหิมะถล่มไม่มีที่สิ้นสุดของคุณสมบัติใหม่และพวกเขาเรียกมันว่าร่าง SQL3

ดังนั้นจึงเข้ากันได้ไปข้างหน้า

และฉันพบว่ามันมีผลข้างเคียงที่ดีอีกอย่างหนึ่งมันช่วยได้มากเมื่อคุณใช้ grep ในการตรวจสอบโค้ดและการรีแฟคเตอร์


4

นอกจากนี้บางฐานข้อมูล SharePoint ประกอบด้วยยัติภังค์ในชื่อของพวกเขา การใช้วงเล็บเหลี่ยมในคำสั่ง SQL อนุญาตให้แยกชื่ออย่างถูกต้อง


3

ฉันเชื่อว่ามันเพิ่มเข้ามาเพื่อความสอดคล้อง ... พวกเขาต้องการเฉพาะเมื่อคุณมีช่องว่างหรืออักขระพิเศษในชื่อคอลัมน์ แต่มันสะอาดกว่าที่จะรวมไว้ตลอดเวลาเมื่อ IDE สร้าง SQL

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