คำถามติดแท็ก stored-procedures

รหัส Callable ที่ติดตั้งบนตัวจัดการฐานข้อมูลเปิดเผย API ซึ่งสามารถเรียกใช้ได้ โดยปกติแล้วจะเขียนด้วยภาษาคิวรีทั่วไปแพลตฟอร์ม DBMS บางภาษาก็รองรับภาษาอื่นเช่นกัน

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

1
กระบวนงานที่เก็บไว้เพื่อส่งคืนข้อมูลตารางที่สร้างขึ้นแบบไดนามิก
เรื่องราวย้อนกลับอย่างรวดเร็วเรากำลังทำงานกับผู้ขายภายนอกที่มีระบบสำรวจ ระบบไม่ได้ถูกออกแบบมาอย่างดีที่สุดเมื่อคุณสร้างแบบสำรวจใหม่และระบบจะสร้างตารางใหม่เช่น: Tables ____ Library_1 -- table for Survey 1 SurveyId int InstanceId int Q_1 varchar(50) Library_2 -- table for Survey 2 SurveyId int InstanceId int Q_2 int Q_3 int Q_4 varchar(255) ตารางจะถูกสร้างขึ้นด้วยการSurveyIdที่ส่วนท้ายของชื่อ ( Library_) และคอลัมน์คำถามจะถูกสร้างขึ้นด้วยการQuestionIdที่ส่วนท้ายของมัน ( Q_) ในการชี้แจงคำถามจะถูกเก็บไว้ในตารางแยกต่างหากดังนั้นในขณะที่รหัสคำถามนั้นเรียงตามลำดับโดยไม่เริ่มต้นที่ 1 สำหรับแต่ละแบบสำรวจ คอลัมน์คำถามจะขึ้นอยู่กับรหัสที่กำหนดให้กับพวกเขาในตาราง ดูเหมือนง่ายพอที่จะสืบค้นยกเว้นเราจำเป็นต้องดึงข้อมูลจากตารางสำรวจทั้งหมดที่จะส่งไปยังระบบอื่นและนี่คือที่มาของปัญหาเนื่องจากตารางจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการเพิ่มแบบสำรวจใหม่โดยหน้า แอปพลิเคชันสิ้นสุดระบบอื่นไม่สามารถจัดการกับโครงสร้างประเภทนี้ได้ พวกเขาต้องการข้อมูลที่สอดคล้องกันเพื่อให้สามารถบริโภคได้ ดังนั้นฉันจึงมอบหมายให้เขียนโพรซีเดอร์ที่เก็บไว้ซึ่งจะดึงข้อมูลจากตารางสำรวจทั้งหมดและวางไว้ในรูปแบบต่อไปนี้: SurveyId InstanceId QNumber Response …

3
คุณจะหาตำแหน่งที่ใช้โพรซีเดอร์ที่เก็บไว้ได้อย่างไร (ในโพรซีเดอร์อื่นที่เก็บไว้)
ฉันมีขั้นตอนการจัดเก็บที่ฉันต้องการ refactor ในฐานข้อมูลที่มี SP หลายพันรายการ มีวิธีที่รวดเร็วในการค้นหาการอ้างอิงไปยังกระบวนงานที่เก็บไว้ใน SP อื่น ๆ เพื่อให้ฉันสามารถมั่นใจได้ว่าฉันจะไม่ทำลายรหัสอื่น ๆ เมื่อฉัน refactor ในรหัสแอปพลิเคชันฉันสามารถค้นหาการเรียกไปที่ SP ได้อย่างง่ายดายและฉันสามารถค้นหาข้อความผ่านไฟล์ sql ต่างๆที่กำหนด SPs ได้ แต่อาจเป็นไปได้ที่อาจมี SP บางตัวในฐานข้อมูลซึ่งอาจพลาดวิธีนั้น . แก้ไข: ขั้นตอนการจัดเก็บฉันพยายามค้นหาเป็นส่วนหนึ่งของแพคเกจ แก้ไข: ฉันใช้ Oracle 11g

1
วิธีหลีกเลี่ยงการใช้แบบสอบถามแบบผสานเมื่อทำซ้ำหลายข้อมูลโดยใช้พารามิเตอร์ xml
ฉันกำลังพยายามอัปเดตตารางด้วยอาร์เรย์ของค่าต่างๆ แต่ละรายการในอาร์เรย์มีข้อมูลที่ตรงกับแถวในตารางในฐานข้อมูล SQL Server หากแถวนั้นมีอยู่แล้วในตารางเราจะอัปเดตแถวนั้นด้วยข้อมูลในอาร์เรย์ที่กำหนด มิฉะนั้นเราจะแทรกแถวใหม่ในตาราง ฉันได้อธิบายโดยทั่วไปเพิ่มขึ้น ตอนนี้ฉันกำลังพยายามทำให้สำเร็จในโพรซีเดอร์ที่เก็บไว้ซึ่งใช้พารามิเตอร์ XML เหตุผลที่ฉันใช้ XML และไม่ใช่พารามิเตอร์ที่มีค่าเป็นตารางเนื่องจากฉันจะต้องสร้างประเภทที่กำหนดเองใน SQL และเชื่อมโยงประเภทนี้กับกระบวนงานที่เก็บไว้ หากฉันเปลี่ยนบางสิ่งบางอย่างในขั้นตอนการจัดเก็บหรือ db schema ของฉันลงที่ถนนฉันจะต้องทำซ้ำทั้งขั้นตอนการจัดเก็บและประเภทที่กำหนดเอง ฉันต้องการหลีกเลี่ยงสถานการณ์นี้ นอกจากนี้ความเหนือกว่าที่ TVP มีเหนือ XML ไม่มีประโยชน์สำหรับสถานการณ์ของฉันเพราะขนาดอาร์เรย์ข้อมูลของฉันจะไม่เกิน 1,000 ซึ่งหมายความว่าฉันไม่สามารถใช้โซลูชันที่เสนอที่นี่: วิธีแทรกหลายระเบียนโดยใช้ XML ใน SQL Server 2008 นอกจากนี้ยังมีการอภิปรายที่คล้ายกันที่นี่ ( UPSERT - มีทางเลือกที่ดีกว่าสำหรับ MERGE หรือ @@ rowcount หรือไม่ ) แตกต่างจากที่ฉันขอเพราะฉันพยายามเพิ่มหลายแถวไปยังตาราง ฉันหวังว่าฉันจะใช้ชุดคำสั่งต่อไปนี้เพื่อเพิ่มค่าจาก xml แต่นี่จะไม่ทำงาน วิธีการนี้ควรทำงานเมื่ออินพุตเป็นแถวเดียว begin tran …

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

2
sp_msforeachdb ทำงานอย่างไรเบื้องหลัง?
ฉันต้องการแก้ไขปัญหาที่ฉันมีและต้องการความช่วยเหลือในการทำความเข้าใจวิธีการทำงานของ sp_msforeachdb เพื่อที่จะเอาชนะปัญหาของฉัน สิ่งที่เกิดขึ้นคือทุกครั้งที่ฉันเรียกใช้ sp_msforeachdb ฉันจะได้รับข้อผิดพลาด Msg 102, Level 15, State 1, Incorrect syntax near '61' ตัวอย่างของรหัสของฉันเป็นดังนี้: EXEC SP_msforeachdb 'SELECT ''?'' AS Database FROM ?.sys.objects WHERE name like ''%aetna%'' อย่างไรก็ตามมันไม่สำคัญว่าเคียวรีใดที่ฉันมีเป็นพารามิเตอร์สำหรับ sp_msforeachdb ทุกครั้งที่ฉันได้รับข้อผิดพลาดเดียวกัน ฉันมีฐานข้อมูลที่ขึ้นต้นด้วย '61s1d' ดังนั้นฉันคิดว่ามันมีปัญหากับชื่อ DB แต่โดยสุจริตฉันไม่รู้ว่าเกิดอะไรขึ้นเบื้องหลังของ sp_msforeachdb สิ่งที่ควรทราบ มันเป็นฐานข้อมูลเดียวที่เริ่มต้นด้วยตัวเลข ฉันสามารถลองใช้รหัสเช่น "ถ้าฐานข้อมูลเป็น '% 61%' อย่าทำ ...... " แต่ก็ยังมีข้อผิดพลาดเดียวกัน ฉันไม่สามารถทดสอบการเปลี่ยนชื่อฐานข้อมูล - …

2
ฉันจะเขียน SQL แบบพกพาที่อ้างถึงเซิร์ฟเวอร์ที่เชื่อมโยงได้อย่างไร
ฉันมีขั้นตอนการจัดเก็บที่อ้างอิงถึงเซิร์ฟเวอร์ที่เชื่อมโยง ในหลาย ๆ ที่ตลอดกระบวนการฉันมีบางอย่างดังต่อไปนี้: INSERT INTO [TableName] (...Columns...) SELECT ...Columns... FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName] WHERE TableNameID = @TableNameID ขั้นตอนนี้มีอยู่ในสภาพแวดล้อมการพัฒนาของฉันสภาพแวดล้อมการทดสอบและสภาพแวดล้อมแบบสด ปัญหาคือแต่ละสำเนาของโพรซีเดอร์นั้นแตกต่างกันอย่างละเอียดเนื่องจากชื่อเซิร์ฟเวอร์แตกต่างกันสำหรับแต่ละสภาพแวดล้อม สิ่งนี้ทำให้การจัดการการปรับใช้การอัปเดตสคริปต์ลำบาก มีวิธีทำให้โพรซีเดอร์แบบพกพาเพื่อให้แต่ละสภาพแวดล้อมสามารถรันเวอร์ชันที่เหมือนกันได้หรือไม่? ถ้าไม่มีอะไรที่ฉันสามารถทำได้เพื่อให้การปรับใช้สคริปต์มีแนวโน้มที่จะเกิดข้อผิดพลาด / ข้อผิดพลาดน้อยลง

2
mysql.proc หยุดทำงานไม่สามารถทำ mysqldump ได้หรือไม่?
เนื่องจากปัญหาบางอย่างกับ InnoDB ฉันจะถ่ายโอนฐานข้อมูลทั้งหมดไปยังเซิร์ฟเวอร์ใหม่: mysqldump -E -R --all-databases | pv -b | mysql -u root -p -h new.server กระบวนการดัมพ์หยุดทำงานโดยมีข้อผิดพลาด: 59.9kB assword: 59.9kB ERROR 145 (HY000) at line 2970: Table './mysql/proc' is marked as crashed and should be repaired 228MB mysqldump: Got errno 32 on write ฉันใช้คำสั่งต่อไปนี้เพื่อซ่อมแซมตารางทั้งหมดในฐานข้อมูลทั้งหมด: mysqlcheck --auto-repair --all-databases เมื่อฉันตรวจสอบmysql.procสถานะฉันจะได้รับ: mysql> …

4
ฉันจะทราบได้อย่างไรว่าขั้นตอนหรือทริกเกอร์ที่เก็บไว้กำลังใช้ตารางใน SQL Server 2008 R2
นี่เป็นกรณีที่ใน DB ที่ฉันกำลังตรวจสอบมีตารางเก็บถาวรซึ่งเก็บประวัติผู้ใช้และมีทริกเกอร์หรือขั้นตอนการจัดเก็บที่หลังจากลบแถวออกจากตารางนี้ในบางครั้งเพื่อหลีกเลี่ยงการมีขนาดใหญ่เกินไป เหมือนกันฉันไม่ได้ออกแบบฐานข้อมูลฉันแค่ทำการบำรุงรักษาแอปพลิเคชันที่ใช้ฐานข้อมูลนี้ดังนั้นฉันจึงไม่ทราบชื่อของขั้นตอนหรือทริกเกอร์ที่เก็บไว้สิ่งที่ฉันต้องการทำคือค้นหาโพรซีเดอร์ที่เก็บไว้นี้ หรือทริกเกอร์ตรวจสอบรหัสและปรับเปลี่ยนเพื่อปล่อยให้ "ประวัติผู้ใช้" นี้ยาวขึ้นในตาราง มีคนบอกให้ฉันตรวจสอบตาราง "sysobjects" ซึ่งฉันสามารถเห็นบางสิ่งบางอย่างที่มีชื่อเดียวกันของตารางได้ แต่นี่เป็นข้อมูลเดียวที่ฉันสามารถเรียกคืนได้คำแนะนำใด ๆ ขอบคุณ.

2
วิธีโยกย้าย SQL Server Stored Procedure โดยใช้ตารางชั่วคราวหรือตัวแปรตารางไปยัง Oracle
ผู้พัฒนา C # ได้รับการสนับสนุนโดยฝ่ายบริหารให้เขียนขั้นตอนการจัดเก็บ SQL Server มักจะสร้างขั้นตอนเช่นนี้ create table #t1 (...); insert into #t1 Select ... from table_a where ...; insert into #t1 Select ... from table_b where ...; update #t1 Set ... = ... where ... Select * from #t1; คำสั่งเดียวค่อนข้างง่ายและวิธีนี้ทำให้พวกเขาผลิตผลลัพธ์ที่ถูกต้อง บ่อยครั้งที่งานของฉันคือการโยกย้ายขั้นตอนดังกล่าวไปยัง Oracle ลองหน้าข้อเท็จจริงต่อไปนี้ สำหรับตารางชั่วคราวที่แตกต่างกันใน SQL Server นั้นมีความเป็นอิสระอย่างสมบูรณ์และสามารถมีโครงสร้างแบบเฉพาะกิจได้ ตารางทั่วโลกของ …

1
sp_prepexec (sp_execute) กับ sp_executeSQL
เนื้อของคำถาม: เป็นขั้นตอนการจัดเก็บจริงกลไกเดียวที่ดำเนินการแคชตารางชั่วคราวหรือทำขั้นตอนการจัดเก็บระบบเช่นsp_executeSQL/ sp_executeยังใช้ประโยชน์จากพวกเขา? ฉันไม่ใช่ DBA ดังนั้นโปรดใช้คำพูดเล็กน้อย โปรแกรมของเราส่งงบเตรียมมากกว่าว่าจาก Profiler ที่ฉันเห็นเรียกใช้ SQL ทั้งหมดที่ผ่านsp_prepexecซึ่งเป็นขั้นตอนของระบบสำหรับทั้งทำงานและsp_prepare sp_executeสิ่งที่ฉันพยายามทำคือหาว่าฉันได้รับประโยชน์จากการแคชตารางชั่วคราว ฉันใช้คู่มือนี้กับ object_id () เพื่อตรวจสอบพฤติกรรม https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html แล้วชี้ # 3 โพสต์บล็อกนี้แสดงให้เห็นว่า EXEC ไม่สามารถใช้แคชตาราง temp แต่ใบออกว่า sp_executesql สามารถ: http://blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- SP-executesql.aspx ในแบบสอบถามของฉันส่งผ่านทางลูกค้าฉันได้สร้างตารางชั่วคราว DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement SELECT 1 AS id INTO …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.