เมื่อผู้ใช้แมปกับสคีมาเริ่มต้น (dbo) และเราสามารถเลือกตารางทั้งหมดภายใต้ [dbo] โดยไม่ต้องนำหน้าสคีมา
เราสามารถดำเนินการขั้นตอนการจัดเก็บโดยไม่มีคำนำหน้าหากอยู่ภายใต้สคีมาเริ่มต้น
ระบุว่าทำไมเราต้องนำหน้าฟังก์ชันด้วยสคีมา
ขอบคุณ!
เมื่อผู้ใช้แมปกับสคีมาเริ่มต้น (dbo) และเราสามารถเลือกตารางทั้งหมดภายใต้ [dbo] โดยไม่ต้องนำหน้าสคีมา
เราสามารถดำเนินการขั้นตอนการจัดเก็บโดยไม่มีคำนำหน้าหากอยู่ภายใต้สคีมาเริ่มต้น
ระบุว่าทำไมเราต้องนำหน้าฟังก์ชันด้วยสคีมา
ขอบคุณ!
คำตอบ:
แล้วทำไมเราถึงเรียกฟังก์ชั่นโดยไม่มีคำนำหน้า (schema) สร้างขึ้นภายใต้ dbo?
จากBooks Online Document เกี่ยวกับ UDF
ฟังก์ชั่นที่มีมูลค่าสเกลาสามารถเรียกใช้โดยใช้นิพจน์สเกลาร์ ซึ่งรวมถึงคอลัมน์ที่คำนวณและคำจำกัดความของ CHECK ฟังก์ชั่นที่มีมูลค่าสเกลาสามารถดำเนินการได้โดยใช้คำสั่ง EXECUTE ฟังก์ชั่นเกลามูลค่าจะต้องถูกเรียกโดยใช้เวลาอย่างน้อยชื่อสองส่วนของฟังก์ชั่น
ดังนั้นนี่เป็นข้อ จำกัด ที่กำหนดโดยทีมพัฒนา SQL Server และฉันคิดว่ามันค่อนข้างถูกต้อง แม้ว่าจะได้รับอนุญาตอย่างใด (เพียงเพื่อการสนทนา) ฉันจะยังคงใช้คำนำหน้า Schema
ฉันสนับสนุนการใช้ชื่อสคีมาเสมอแม้ว่าจะใช้งานได้โดยไม่เพิ่มก็ตาม นี่คือแนวปฏิบัติที่ดีที่สุดและนักพัฒนา "ดี" ทุกคนใช้งานไม่ว่าจะซ้ำซ้อนมากแค่ไหน
เหตุผลอื่นที่ฉันเห็นคือเอ็นจิ้นฐานข้อมูลต้องการบางอย่างเพื่อแยกความแตกต่างระหว่างฟังก์ชั่นของระบบและฟังก์ชั่นที่getdate ()
ผู้ใช้กำหนด หากคุณได้รับอนุญาตให้เรียกใช้ฟังก์ชันโดยไม่มีชื่อสกีมาว่ากลไกจัดการฐานข้อมูลจะแยกความแตกต่างระหว่างฟังก์ชันที่ผู้ใช้สร้างขึ้นชื่อ Getdate หรือฟังก์ชัน GETDATE () ของระบบได้อย่างไร
คำตอบอื่น ๆ อธิบายว่านี่เป็นข้อ จำกัด แต่ไม่ใช่เหตุผลว่าทำไม
ความต้องการไม่ได้เป็นจริงเสมอไป สเกลาร์ UDF สามารถเป็นได้EXEC
และยังคงใช้การแก้ปัญหาโดยนัย ( ตัวอย่าง )
ฉันคิดว่านี่คือการหลีกเลี่ยงการตั้งชื่อการชน
หากฟังก์ชั่นได้รับอนุญาตให้อ้างอิงโดยไม่มีสคีมาแล้วคนที่สร้างฟังก์ชั่นของตัวเองที่ถูกเรียกว่าcrypt_gen_random
ในปี 2000 หรือ 2005 จะพบปัญหาในการอัพเกรดเป็นเวอร์ชั่นที่ใหม่กว่าเนื่องจากนี่เป็นชื่อของฟังก์ชันภายในในปี 2008
ไม่มีความคลุมเครือในexec
การใช้งานเนื่องจากไม่สามารถเรียกใช้ฟังก์ชันที่มีอยู่แล้วภายในได้