ประกาศตัวแปรในฟังก์ชันค่าตาราง


111

ฉันจะประกาศตัวแปรในฟังก์ชันค่าตารางได้อย่างไร (เช่นในชื่อของฉัน)


อินไลน์หรือหลายคำสั่ง? เช่นMSDNอธิบายไว้หรือไม่
gbn

คำตอบ:


207

มีฟังก์ชั่นมูลค่าโต๊ะสองรสชาติ คำสั่งที่เป็นเพียงคำสั่งเลือกและคำสั่งที่สามารถมีแถวได้มากกว่าคำสั่งเลือก

สิ่งนี้ไม่สามารถมีตัวแปร:

create function Func() returns table
as
return
select 10 as ColName

คุณต้องทำสิ่งนี้แทน:

create function Func()
returns @T table(ColName int)
as
begin
  declare @Var int
  set @Var = 10
  insert into @T(ColName) values (@Var)
  return
end

34
ตัวอย่างแรกเป็นที่รู้จักกันว่าเป็น "ฟังก์ชั่นแบบอินไลน์ตารางมูลค่า" ซึ่งมีประโยชน์ต่อการปฏิบัติงานเมื่อเทียบกับหลายคำสั่งตารางมูลค่าฟังก์ชั่นคือเซิร์ฟเวอร์ฐานข้อมูลสามารถจัดองค์ประกอบแบบสอบถามกับ ITVF inlinedลงในแบบสอบถามผู้ปกครองเป็นหลักกลายเป็น parameterised VIEWในขณะที่ MSTVF ทำงานเหมือนขั้นตอนการจัดเก็บแบบทึบแสง (แม้ว่าจะมีข้อดีของตัวเองเมื่อเทียบกับ sprocs) ควรเลือกใช้ฟังก์ชันแบบอินไลน์มากกว่า MSTVF หากคุณต้องการคำนวณและจัดเก็บค่ากลาง (เช่นผลลัพธ์ของนิพจน์ฟังก์ชันสเกลาร์ที่ซับซ้อน) ให้ใช้เคียวรีย่อย
Dai

1
อาจเป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่าหากผลลัพธ์ของสิ่งที่คุณใช้ในการเติมค่าตัวแปรที่คุณต้องการตั้งค่านั้นเป็นไปในลักษณะใดก็ตามคุณสามารถพิจารณาเขียนฟังก์ชันแยกต่างหากเพื่อสร้างได้ สิ่งนี้จะช่วยให้คุณสามารถใช้ ITVF ที่อธิบายโดย @Dai ข้างต้นพร้อมประโยชน์ทั้งหมดของมันในขณะที่ยังคงแทรกค่าที่สร้างขึ้นแบบไดนามิกลงในฟังก์ชันของคุณ ฉันเพิ่งเขียนฟังก์ชันด้วยความช่วยเหลือของโซลูชันข้างต้น (ขอบคุณ @MikaelEriksson!) ซึ่งส่งผ่านพารามิเตอร์หนึ่งไปยังฟังก์ชันตัวช่วยเพื่อช่วยฉันไม่ต้องใช้แบบฟอร์ม MSTVF
naughtilus

1
ต้นทุนที่ใหญ่ที่สุดกำลังแทรกสำหรับฟังก์ชันของฉันและฉันไม่รู้ว่าจะข้ามต้นทุนนี้ได้อย่างไรโดยไม่ต้องแทรกตัวแปรตารางและส่งคืนผลลัพธ์ของการเลือก
uzay95

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