คำถามติดแท็ก functions

ฟังก์ชั่นดำเนินการงานที่ระบุบางอย่างมักจะรับพารามิเตอร์เป็นอินพุต ในแง่ของฐานข้อมูลสิ่งเหล่านี้อาจเฉพาะ SQL หรือผู้จำหน่ายฐานข้อมูล

10
วิธีสร้างซีรีย์ 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, ... ใน SQL มาตรฐานหรือ T-SQL
ด้วยตัวเลขสองตัวnและmฉันต้องการสร้างชุดของแบบฟอร์ม 1, 2, ..., (n-1), n, n, (n-1), ... 2, 1 และทำซ้ำmครั้ง ตัวอย่างเช่นสำหรับn = 3และm = 4ฉันต้องการลำดับหมายเลข 24 ต่อไปนี้: 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1 ---------------- ---------------- ---------------- ---------------- ฉันรู้วิธีการบรรลุผลลัพธ์นี้ใน PostgreSQL โดยวิธีใดวิธีหนึ่งจากสองวิธี: …

2
PostgreSQL: ส่งผ่านตารางเป็นอาร์กิวเมนต์ในฟังก์ชัน
ฉันกำลังค้นพบTYPEใน PostgreSQL ฉันมีTABLE TYPEตารางที่ต้องเคารพ (อินเตอร์เฟส) ตัวอย่างเช่น: CREATE TYPE dataset AS( ChannelId INTEGER ,GranulityIdIn INTEGER ,GranulityId INTEGER ,TimeValue TIMESTAMP ,FloatValue FLOAT ,Status BIGINT ,QualityCodeId INTEGER ,DataArray FLOAT[] ,DataCount BIGINT ,Performance FLOAT ,StepCount INTEGER ,TableRegClass regclass ,Tags TEXT[] ,WeightedMean FLOAT ,MeanData FLOAT ,StdData FLOAT ,MinData FLOAT ,MaxData FLOAT ,MedianData FLOAT ,Percentiles FLOAT[] …


1
โดยประมาณกับแผนแบบสอบถามจริงกับการเรียกใช้ฟังก์ชัน
ฉันมีแบบสอบถามนี้ในเซิร์ฟเวอร์ SQL แบบสอบถามจำลองแบบผสาน: SELECT DISTINCT b.tablenick, b.rowguid, c.generation, sys.fn_MSgeneration_downloadonly ( c.generation, c.tablenick ) FROM #belong b LEFT OUTER JOIN dbo.MSmerge_contents c ON c.tablenick = b.tablenick AND c.rowguid = b.rowguid; แผนแบบสอบถามโดยประมาณมีข้อมูลเกี่ยวกับ 3 แบบสอบถาม แบบสอบถามข้างต้น การเรียกใช้ฟังก์ชันเพื่อ fn_MSgeneration_download เท่านั้น การเรียกใช้ฟังก์ชันเพื่อ fn_MSArticle_has_downloadonly_property แผนแบบสอบถามจริงรวมเฉพาะข้อมูลนี้: แบบสอบถามข้างต้น ไม่มีอะไรเกี่ยวกับฟังก์ชั่น เหตุใดข้อมูลฟังก์ชันจึงขาดหายไปในแผนจริง ฉันลองตัวเลือกเหล่านี้: SET STATISTICS PROFILE ON SET STATISTICS XML …

8
คอลัมน์ตัวตนหรือ UDF ที่สร้างรหัสเฉพาะอย่างชัดเจน?
ผมอยู่ในช่วงกลางของการอภิปรายเกี่ยวกับว่ามันจะดีกว่าที่จะทำให้PRIMARY KEYออกมาจากคอลัมน์ประจำตัวของเราออกจาก UDF ที่ชัดเจนสร้างรหัสที่ไม่ซ้ำกัน ฉันโต้เถียงกับคอลัมน์ข้อมูลประจำตัว คู่ของฉันกำลังโต้เถียงในการสร้างค่าด้วยตนเองเขาอ้างว่า โดยใส่ UDF ลงในตารางอื่นที่เราสามารถมี UDF ได้ ล็อคทรัพยากร เพิ่มตาราง ID ด้วยหนึ่งฟิลด์ที่เรียกID_Valueโดย1 ใช้สิ่งนี้เป็นตัวระบุที่ไม่ซ้ำกันระดับโลก หรือมีตารางทำid+1เมื่อแทรก ง่ายกว่าที่จะย้ายข้อมูลระหว่างเซิร์ฟเวอร์และ / หรือสภาพแวดล้อมที่ไม่มีข้อ จำกัด ในการระบุ ย้ายจากฐานข้อมูลหนึ่งที่มีข้อมูลไปยังฐานข้อมูลอื่นที่คล้ายกันพร้อมให้บอกว่าการจัดเตรียมหรือข้อมูลจำลอง สำหรับการทดสอบที่ไม่ใช่การผลิตเราอาจต้องการดึงระเบียนทั้งหมดจากเมื่อวานนี้ลงไปยังการจัดเตรียมสำหรับการทดสอบ การใช้งานแบบใดที่เหมาะสมกว่า

3
แปลงฟังก์ชัน Scalar เป็นฟังก์ชัน TVF สำหรับการประมวลผลแบบขนาน - ยังคงทำงานในโหมดอนุกรม
หนึ่งในแบบสอบถามของฉันทำงานในโหมดการดำเนินการแบบอนุกรมหลังจากวางจำหน่ายและฉันสังเกตเห็นว่ามีการใช้ฟังก์ชันใหม่สองรายการในมุมมองซึ่งอ้างอิงใน LINQ ไปยัง SQL Query ที่สร้างขึ้นจากแอปพลิเคชัน ดังนั้นฉันจึงแปลงฟังก์ชัน SCALAR เหล่านั้นเป็นฟังก์ชั่น TVF แต่คำถามก็ยังคงทำงานอยู่ในโหมดอนุกรม ก่อนหน้านี้ฉันได้แปลง Scalar เป็น TVF ในข้อความค้นหาอื่นและแก้ปัญหาการบังคับให้เรียกใช้งานอนุกรม นี่คือฟังก์ชันสเกลาร์: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER …

2
การสนับสนุน Parallel Scalar UDF เป็นการร้องขอคุณสมบัติที่เหมาะสมหรือไม่?
มีการบันทึกไว้ค่อนข้างดีว่าสเกลาร์ของ UDF เป็นแผนอนุกรมโดยรวม ฟังก์ชั่นที่ทำงานในแบบคู่ขนาน เมื่อมีจำนวนแถวเข้ามาในจุดที่ต้องคำนวณ UDF ทำไมเครื่องยนต์ไม่สามารถกระจายไปยังโปรเซสเซอร์ได้ หากไม่มีสถานะใน UDF คำสั่งนั้นไม่ควรสำคัญ มีการเรียกร้องเกี่ยวกับ UDF ที่เป็นกล่องดำจะต้องใช้เคอร์เซอร์ ฉันเห็นว่าเคอร์เซอร์ผู้ใช้ไม่สามารถทำให้ขนานภายใน SP สำหรับกรณีที่บางสถานะถูกเก็บรักษาไว้ระหว่างการทำซ้ำ แต่ดูเหมือนว่าควรจะเป็นแบบขนาน คะแนนพิเศษสำหรับการอธิบายว่าทำไมเครื่องยนต์บังคับให้แผนทั้งหมดเป็นอนุกรมแทนที่จะเป็นเพียงขั้นตอนการคำนวณ UDF การสนับสนุน UDF แบบขนานเป็นคุณสมบัติที่เหมาะสมในการร้องขอหรือไม่

2
ส่งคืนระเบียนด้วยฟังก์ชัน PL / pgSQL - เพื่อเพิ่มความเร็วในการสืบค้น
ฉันมีดีมอนที่ไม่ใช่ forking เขียนใน Perlซึ่งใช้การสอบถาม acync เพื่อเขียนสถิติผู้เล่นลงในฐานข้อมูล PostgreSQL 9.3 แต่เมื่อฉันต้องการอ่านบางสิ่งจากฐานข้อมูล (เช่นถ้าผู้เล่นถูกแบนหรือหากผู้เล่นมีสถานะวีไอพี) จากนั้นฉันจะใช้แบบสอบถามแบบซิงโครนัส สิ่งนี้ทำให้เกมหยุดชั่วขณะหนึ่งจนกว่าจะอ่านค่าจากฐานข้อมูล ฉันไม่สามารถเขียน daemon เกมของฉันใหม่เพื่อใช้การสืบค้นแบบ async สำหรับการอ่านค่า (ฉันพยายาม แต่มันต้องมีการเปลี่ยนแปลงมากเกินไป) ดังนั้นคำถามของฉันคือ : มันจะเป็นการรวมเข้ากับแบบสอบถามที่ไม่เกี่ยวข้องหลายรายการหรือไม่ เชื่อมต่อ) ถึง 1 ขั้นตอนและฉันจะคืนค่าหลายค่าในเวลาเดียวกันไปยังโปรแกรม Perl ของฉันได้อย่างไร ข้อความค้นหาปัจจุบันของฉันทั้งหมดใช้รหัสผู้เล่นเป็นพารามิเตอร์และส่งกลับค่า 1: -- Has the player been banned? select true from pref_ban where id=? -- What is the reputation of this player? …

3
เก็บสูตรไว้ในตารางและใช้สูตรในฟังก์ชัน
ฉันมีฐานข้อมูล PostgreSQL 9.1 ซึ่งเป็นส่วนหนึ่งที่จัดการค่าคอมมิชชั่นของตัวแทน ตัวแทนแต่ละรายมีสูตรการคำนวณของตนเองเพื่อรับค่าคอมมิชชั่น ฉันมีฟังก์ชั่นในการสร้างจำนวนค่าคอมมิชชันที่แต่ละตัวแทนควรได้รับ แต่มันเป็นไปไม่ได้ที่จะใช้เมื่อจำนวนตัวแทนเพิ่มขึ้น ฉันถูกบังคับให้ทำใบแจ้งยอดที่ยาวและรหัสซ้ำซึ่งทำให้ฟังก์ชั่นของฉันใหญ่มาก สูตรทั้งหมดมีตัวแปรคงที่: d .. วันทำงานในเดือนนั้น r .. โหนดใหม่ได้รับการรับรอง l .. คะแนนความภักดี s .. ค่านายหน้าย่อย b .. อัตราฐาน ฉัน .. รายได้ที่ได้รับ สูตรสามารถเป็นดังนี้: d*b+(l*4+r)+(i/d)+s แต่ละตัวแทนเจรจาสูตรการชำระเงินกับฝ่ายทรัพยากรบุคคล ดังนั้นฉันสามารถเก็บสูตรไว้ในตารางตัวแทนได้แล้วมีฟังก์ชั่นเล็ก ๆ ที่เพิ่งได้สูตรจากตารางและแปลมันด้วยค่าและคำนวณจำนวนหรือไม่

5
ฟังก์ชัน SQL ตารางที่มีค่าเพื่อแยกคอลัมน์บนเครื่องหมายจุลภาค
ฉันเขียน Table Valued Function ใน Microsoft SQL Server 2008 เพื่อใช้คอลัมน์คั่นด้วยเครื่องหมายจุลภาคในฐานข้อมูลเพื่อแยกแถวที่แยกออกสำหรับแต่ละค่า เช่น: "หนึ่งสองสามสี่" จะส่งคืนตารางใหม่โดยมีเพียงหนึ่งคอลัมน์ที่มีค่าต่อไปนี้: one two three four รหัสนี้มีข้อผิดพลาดเกิดขึ้นกับคุณหรือเปล่า? เมื่อฉันทดสอบด้วย SELECT * FROM utvf_Split('one,two,three,four',',') มันวิ่งไปตลอดกาลและจะไม่ส่งคืนสิ่งใดเลย นี่เป็นสิ่งที่ทำให้ท้อใจโดยเฉพาะอย่างยิ่งเนื่องจากไม่มีฟังก์ชั่นแยกในเซิร์ฟเวอร์ MSSQL (ทำไมเพราะอะไร?!) และฟังก์ชั่นที่คล้ายกันทั้งหมดที่ฉันพบบนเว็บเป็นถังขยะแน่นอนหรือไม่เกี่ยวข้องกับสิ่งที่ฉันพยายามทำ . นี่คือฟังก์ชั่น: USE *myDBname* GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR) RETURNS @SplitValues …

1
ฟังก์ชันสเกลาร์ที่ใช้ในคอลัมน์จากการคำนวณเป็นวิธีที่สะอาดที่สุดในการอัปเดตฟังก์ชั่น
ฉันต้องการอัพเดทฟังก์ชั่นสเกลาร์ในฐานข้อมูลของเรา ฟังก์ชั่นนี้ใช้สำหรับคอลัมน์จากการคำนวณหลายคอลัมน์ในตารางคีย์ดังนั้นฉันจึงได้รับข้อผิดพลาดในการพึ่งพาถ้าฉันพยายามอัปเดต ฉันสามารถลบคอลัมน์อัปเดตฟังก์ชั่นและเพิ่มคอลัมน์ใหม่ได้อย่างชัดเจน แต่โดยไม่ต้องมีอะไรพิเศษมากมายที่จะเปลี่ยนลำดับคอลัมน์และอาจมีผลกระทบอื่น ๆ ที่ไม่ได้ตั้งใจ ฉันสงสัยว่ามีวิธีที่สะอาดกว่าในการทำเช่นนี้หรือไม่?

1
ฟังก์ชั่นเพื่อรับอินพุตอักขระและรูปแบบวันที่ส่งคืน (ที่มีอินพุตไม่ถูกต้อง)
ฉันต้องเขียนฟังก์ชั่นเพื่อรับตัวอักษรสตริงและกลับรูปแบบวันที่ ตัวอย่างเช่นการป้อนข้อมูลคือ 20120101 และฉันต้องการสิ่งนี้ 2012-01-01 ปัญหาคืออาจมีอินพุตที่ไม่ถูกต้องเช่น "2012ABCD" นี้ ในกรณีนั้นฉันต้องการให้ฟังก์ชันส่งคืนวันที่ที่แน่นอนเช่น 2020-01-01 สิ่งที่ฉันเขียนจนถึงตอนนี้คือ: Create Function ReturnDate (@date varchar(8)) Returns date as begin declare @result date set @result = (select convert(date , @date,111)) if(@@ROWCOUNT>0) return @result else return '2020-01-01' return @result end ไม่ทำงานและฉันไม่รู้วิธีจัดการส่วนที่สอง (เมื่ออินพุตไม่ถูกต้อง)

1
เห็นได้ชัดว่าฟังก์ชั่นการประกอบ CLR ของฉันทำให้เกิดการหยุดชะงัก
แอปพลิเคชันของเราต้องทำงานอย่างเท่าเทียมกันกับฐานข้อมูล Oracle หรือฐานข้อมูล Microsoft SQL Server เพื่ออำนวยความสะดวกในเรื่องนี้เราได้สร้าง UDF จำนวนหนึ่งเพื่อทำให้ไวยากรณ์การสืบค้นของเราเป็นเนื้อเดียวกัน ตัวอย่างเช่น SQL Server มี GETDATE () และ Oracle มี SYSDATE พวกเขาทำหน้าที่เดียวกัน แต่เป็นคำที่ต่างกัน เราเขียน wrapper UDF ชื่อ NOW () สำหรับทั้งสองแพลตฟอร์มซึ่งล้อมรอบไวยากรณ์เฉพาะแพลตฟอร์มที่เกี่ยวข้องในชื่อฟังก์ชันทั่วไป เรามีฟังก์ชั่นอื่น ๆ ซึ่งบางส่วนไม่ทำอะไรเลย แต่มีอยู่เพียงเพื่อความเป็นเนื้อเดียวกัน น่าเสียดายที่ค่าใช้จ่ายนี้สำหรับ SQL Server UDF สเกลาร์แบบอินไลน์สร้างความหายนะต่อประสิทธิภาพและปิดการใช้งานความขนานอย่างสมบูรณ์ เป็นทางเลือกเราเขียนฟังก์ชันการประกอบ CLR เพื่อให้บรรลุเป้าหมายเดียวกัน เมื่อเราปรับใช้สิ่งนี้กับลูกค้าพวกเขาเริ่มประสบกับการหยุดชะงักบ่อยครั้ง ลูกค้ารายนี้ใช้การจำลองแบบและเทคนิคความพร้อมใช้งานสูงและฉันสงสัยว่ามีการโต้ตอบบางอย่างเกิดขึ้นที่นี่หรือไม่ ฉันไม่เข้าใจว่าการแนะนำฟังก์ชัน CLR จะทำให้เกิดปัญหาเช่นนี้ได้อย่างไร สำหรับการอ้างอิงฉันได้รวมข้อกำหนด UDF สเกลาร์ต้นฉบับไว้รวมถึงข้อกำหนดการแทนที่ CLR ใน …

2
เหตุใดคำนำหน้าสคีมา (dbo) จึงจำเป็นเมื่อเราเรียกใช้ฟังก์ชัน
เมื่อผู้ใช้แมปกับสคีมาเริ่มต้น (dbo) และเราสามารถเลือกตารางทั้งหมดภายใต้ [dbo] โดยไม่ต้องนำหน้าสคีมา เราสามารถดำเนินการขั้นตอนการจัดเก็บโดยไม่มีคำนำหน้าหากอยู่ภายใต้สคีมาเริ่มต้น ระบุว่าทำไมเราต้องนำหน้าฟังก์ชันด้วยสคีมา ขอบคุณ!

1
SentryOne Plan Explorer นับการอ่านเป็น UDF หรือไม่
ฉันมีคำถามเช่นนี้ select dbo.fn_complexFunction(t.id) from mytable t ในSQL Sentry Plan Explorerฉันสังเกตเห็นว่าฉันต้องเรียกใช้ Get Estimated Plan เพื่อให้ Query Plan รวมถึง UDF เมื่อเรียกใช้ 'รับแผนจริง' จะไม่ปรากฏว่าการอ่านเชิงตรรกะและตัวชี้วัดอื่น ๆ รวมถึงการดำเนินการที่เกิดขึ้นใน UDF ในกรณีเช่นนี้การแก้ปัญหาเพียงอย่างเดียวในการใช้ Profiler คืออะไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.