คุณมีคำถามที่แตกต่างกันสองสามข้อที่นี่
ถาม: ฟังก์ชัน SQL มาตรฐาน ANSI คืออะไร
ฟังก์ชันมาตรฐาน ANSI คือสิ่งต่าง ๆ เช่น AVG, COUNT, MIN, MAX พวกเขากำลังครอบคลุมในมาตรฐาน ANSI ปี 1992แต่นั่นเป็นหนึ่งในการอ่านที่แห้งและน่าเบื่อ
ถาม: ฟังก์ชัน SQL มาตรฐาน ANSI เปลี่ยนข้อมูลในฐานข้อมูลหรือไม่
ไม่คุณสามารถใช้พวกเขาเพื่อเปลี่ยนข้อมูล - ตัวอย่างเช่นฉันสามารถพูดได้:
INSERT INTO dbo.MyReport SELECT MAX(SalespersonRevenue) FROM dbo.Sales
แต่ด้วยตัวเองเพียงใช้ AVG, COUNT, MIN, MAX และอื่น ๆ ไม่ควรเปลี่ยนข้อมูลอย่างถาวรภายในฐานข้อมูลของคุณ
ถาม: มาตรฐาน ANSI อนุญาตให้ฉันเขียนฟังก์ชั่นของตัวเองได้หรือไม่?
ใช่ แต่การใช้งานที่แน่นอนนั้นแตกต่างกันไปตามผู้ขายถึงผู้ขาย ฟังก์ชั่นที่คุณเขียนอาจเป็นไปตามมาตรฐานภาษา ANSI แต่สิ่งที่คุณทำในฟังก์ชั่นของคุณนั้นแย่มากอย่างเช่นสร้างผลข้างเคียง
- เมื่อพูดถึงพฤติกรรมที่ตั้งใจไว้เป็นไปได้ที่จะได้รับคำตอบข้ามแพลตฟอร์ม
- เมื่อพูดถึงผลข้างเคียงก็ไม่ได้
ถาม: ฉันสามารถสร้างฟังก์ชั่นของตัวเองเพื่อเขียนข้อมูลได้หรือไม่?
ทำไมถ้าคุณคิดสร้างสรรค์ ฉันเป็นคน Microsoft SQL Server ดังนั้นฉันจะมุ่งเน้นไปที่แพลตฟอร์มนั้น หน้าฟังก์ชั่นของ Books Onlineพูดว่า:
ฟังก์ชันที่ผู้ใช้กำหนดไม่สามารถใช้ในการดำเนินการที่แก้ไขสถานะฐานข้อมูลได้
ที่ฉันพูดว่า:
คุณไม่ใช่พ่อที่แท้จริงของฉัน
ดังนั้นนี่คือวิธีที่ฉันทำผิดกฎ คำเตือน: ความคิดที่เลวร้ายมากปฏิบัติตาม
- ในฟังก์ชันของคุณให้สอบถามตารางใหม่ที่สร้างขึ้นเป็นพิเศษเพื่อจุดประสงค์ที่ชั่วร้ายนี้จากนั้นสร้างสิ่งที่เฝ้าดูตารางสำหรับคำสั่งที่เลือกแล้วเริ่มการกระทำ (เหตุการณ์ขยายการตรวจสอบหรือการติดตาม Profiler) คุณสามารถขอการคุมกำเนิดแบบ Rube Goldberg เพื่อทำงานตามคำแถลงที่เลือก
- ในฟังก์ชั่นรหัสโทร CLR - ห่าคุณยังสามารถเรียกใช้บริการเว็บ บริการเว็บนั้นสามารถส่งข้อมูลกลับไปยังฐานข้อมูลของคุณได้เป็นอย่างดี
- ในฟังก์ชั่นโทร xp_cmdshellและทำอะไรผ่านพรอมต์คำสั่ง (HT @AaronBertrand ในความคิดเห็น)
ตัวอย่างทั้งหมดเหล่านี้มีข้อบกพร่องอย่างมากในรูปแบบของประสิทธิภาพและความสอดคล้องของธุรกรรม คุณเพิ่งถามว่ามันสามารถทำได้ในทางทฤษฎีหรือไม่และคำตอบคือใช่ ฉันจะไม่ใช้ทั้งสองอย่างในรหัสของฉัน - ฉันจะถอยกลับและถามว่า "อะไรคือเป้าหมายทางธุรกิจที่ฉันพยายามจะทำให้สำเร็จที่นี่และมีวิธีที่ฉันสามารถทำได้เพื่อให้ได้ประสิทธิภาพและความสอดคล้องในการทำธุรกรรม ?" หากคุณต้องการคำแนะนำเฉพาะเกี่ยวกับสิ่งเหล่านั้นฉันจะถามคำถามสแต็คแยกต่างหากพร้อมคำเฉพาะเจาะจง