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

รูทีนย่อยพร้อมใช้งานสำหรับแอ็พพลิเคชันที่เข้าถึงระบบฐานข้อมูลเชิงสัมพันธ์

5
วิธีกำหนดผลลัพธ์ exec ให้กับตัวแปร sql?
คุณกำหนดผลลัพธ์ของการเรียก exec ให้กับตัวแปรใน SQL ได้อย่างไร? ฉันมี proc ที่เก็บไว้up_GetBusinessDayซึ่งเรียกว่าซึ่งส่งคืนวันที่เดียว คุณสามารถทำสิ่งนี้ได้หรือไม่: exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1

12
โพรซีเดอร์ต้องการพารามิเตอร์ที่ไม่ได้ให้มา
ฉันได้รับข้อผิดพลาดเมื่อเข้าถึง Stored Procedure ใน SQL Server Server Error in '/' Application. Procedure or function 'ColumnSeek' expects parameter '@template', which was not supplied. สิ่งนี้เกิดขึ้นเมื่อฉันเรียก Stored Procedure ด้วยพารามิเตอร์ผ่านการเชื่อมต่อข้อมูลของ. net กับ sql (System.data.SqlClient)แม้ว่าฉันจะจัดหาพารามิเตอร์ก็ตาม นี่คือรหัสของฉัน SqlConnection sqlConn = new SqlConnection(connPath); sqlConn.Open(); //METADATA RETRIEVAL string sqlCommString = "QCApp.dbo.ColumnSeek"; SqlCommand metaDataComm = new SqlCommand(sqlCommString, sqlConn); metaDataComm.CommandType …

3
MySQL: การเลือกหลายฟิลด์ให้เป็นตัวแปรหลายตัวในกระบวนงานที่เก็บไว้
ฉันสามารถเลือกหลายคอลัมน์ให้เป็นตัวแปรหลายตัวภายใน Select Query เดียวกันใน MySQL ได้หรือไม่ ตัวอย่างเช่น: DECLARE iId INT(20); DECLARE dCreate DATETIME; SELECT Id INTO iId, dateCreated INTO dCreate FROM products WHERE pName=iName; ไวยากรณ์ที่ถูกต้องสำหรับสิ่งนี้คืออะไร?

6
ฟังก์ชัน SQL เป็นค่าพารามิเตอร์เริ่มต้น?
ฉันลองเปลี่ยนค่าพารามิเตอร์เริ่มต้นด้วยสิ่งนี้: ALTER PROCEDURE [dbo].[my_sp] @currentDate datetime = GETDATE() และ SQL pre-compiler ทั้งหมดให้ฉันคือข้อผิดพลาดนี้: ข่าวสารเกี่ยวกับ 102, ระดับ 15, สถานะ 1, ขั้นตอน my_sp, บรรทัดที่ 8 ไวยากรณ์ไม่ถูกต้องใกล้ '('. ฉันได้สร้างขั้นตอนแล้ว (ฉันไม่แน่ใจว่าเกี่ยวข้องหรือไม่) ฉันใช้ค่าเริ่มต้นที่เป็นโมฆะและตรวจสอบในภายหลัง แต่ดูเหมือนจะไม่เหมาะสม ฉันสามารถทำสิ่งนี้ในบรรทัดเดียวได้หรือไม่? อัปเดต: ฉันกำลังจะออกจากคำอธิบายของ MSDN เกี่ยวกับพารามิเตอร์ขั้นตอนการจัดเก็บ : [= default] เป็นค่าเริ่มต้นสำหรับพารามิเตอร์ หากกำหนดค่าดีฟอลต์ฟังก์ชันสามารถดำเนินการได้โดยไม่ต้องระบุค่าสำหรับพารามิเตอร์นั้น หมายเหตุ: ค่าพารามิเตอร์ดีฟอลต์สามารถระบุได้สำหรับฟังก์ชัน CLR ยกเว้นชนิดข้อมูล varchar (max) และ varbinary (max) เมื่อพารามิเตอร์ของฟังก์ชันมีค่าดีฟอลต์คีย์เวิร์ด DEFAULT จะต้องถูกระบุเมื่อฟังก์ชันถูกเรียกเพื่อดึงค่าดีฟอลต์ …

9
แทรกอัปเดต proc ที่จัดเก็บไว้บน SQL Server
ฉันได้เขียน proc ที่เก็บไว้ซึ่งจะทำการอัปเดตหากมีบันทึกอยู่มิฉะนั้นจะทำการแทรก มีลักษณะดังนี้: update myTable set Col1=@col1, Col2=@col2 where ID=@ID if @@rowcount = 0 insert into myTable (Col1, Col2) values (@col1, @col2) ตรรกะของฉันที่อยู่เบื้องหลังการเขียนด้วยวิธีนี้คือการอัปเดตจะทำการเลือกโดยปริยายโดยใช้ where clause และถ้าสิ่งนั้นส่งกลับ 0 ดังนั้นการแทรกจะเกิดขึ้น ทางเลือกอื่นในการทำเช่นนี้คือทำการเลือกจากนั้นขึ้นอยู่กับจำนวนแถวที่ส่งคืนไม่ว่าจะอัปเดตหรือแทรก สิ่งนี้ฉันถือว่าไม่มีประสิทธิภาพเพราะถ้าคุณจะทำการอัปเดตมันจะทำให้เกิดการเลือก 2 ครั้ง (การเรียกเลือกอย่างชัดเจนครั้งแรกและครั้งที่สองโดยนัยในตำแหน่งของการอัปเดต) หาก proc ทำการแทรกก็จะไม่มีความแตกต่างในด้านประสิทธิภาพ ตรรกะของฉันอยู่ที่นี่หรือไม่? นี่เป็นวิธีที่คุณจะรวมส่วนแทรกและอัปเดตลงใน proc ที่จัดเก็บไว้หรือไม่?

6
เพจกับ Oracle
ฉันไม่คุ้นเคยกับ Oracle เท่าที่ฉันอยากจะเป็น ฉันมีระเบียน 250k และฉันต้องการแสดง 100 รายการต่อหน้า ขณะนี้ฉันมีกระบวนงานที่จัดเก็บไว้หนึ่งขั้นตอนซึ่งดึงข้อมูลทั้งหมดในสี่ล้านระเบียนไปยังชุดข้อมูลโดยใช้อะแดปเตอร์ข้อมูลและชุดข้อมูลและ dataadapter วิธีการกรอกข้อมูล (ชุดข้อมูล) ในผลลัพธ์จาก proc ที่เก็บไว้ หากฉันมี "หมายเลขหน้า" และ "จำนวนระเบียนต่อหน้า" เป็นค่าจำนวนเต็มฉันสามารถส่งผ่านเป็นพารามิเตอร์วิธีใดจะเป็นวิธีที่ดีที่สุดในการเรียกคืนเฉพาะส่วนนั้น สมมติว่าถ้าฉันส่ง 10 เป็นเลขหน้าและ 120 เป็นจำนวนหน้าจากคำสั่งที่เลือกมันจะให้ฉันอยู่ที่ 1880 ถึง 1200 หรือประมาณนั้นคณิตศาสตร์ในหัวของฉันอาจจะดับ ฉันกำลังทำสิ่งนี้ใน. NET ด้วย C # คิดว่าไม่สำคัญถ้าฉันสามารถทำให้มันถูกต้องทางด้าน sql ฉันก็ควรจะเจ๋ง อัปเดต: ฉันสามารถใช้คำแนะนำของ Brian ได้และใช้งานได้ดี ฉันต้องการเพิ่มประสิทธิภาพบางอย่าง แต่หน้าจะปรากฏขึ้นภายใน 4 ถึง 5 วินาทีแทนที่จะเป็นนาทีและการควบคุมเพจของฉันก็สามารถรวมเข้ากับ procs ที่จัดเก็บใหม่ของฉันได้เป็นอย่างดี

17
วิธีการแปลง int เป็น char ด้วยศูนย์นำหน้า?
ฉันต้องการแปลงข้อมูล int เป็น nvarchar ด้วยเลขศูนย์นำหน้า ตัวอย่าง: 1 แปลงเป็น '001' 867 แปลงเป็น '000867' ฯลฯ ขอบคุณ. นี่คือคำตอบของฉัน 4 ชั่วโมงต่อมา ... ฉันทดสอบสคริปต์ T-SQL นี้และทำงานได้ดีสำหรับฉัน! DECLARE @number1 INT, @number2 INT SET @number1 = 1 SET @number2 = 867 SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), …


3
จับภาพผลลัพธ์การพิมพ์ Stored Procedure ใน. NET
เป็นไปได้หรือไม่ที่จะจับภาพเอาต์พุตการพิมพ์จากโพรซีเดอร์ที่จัดเก็บ T-SQL ใน. NET ฉันมีพร็อคดั้งเดิมจำนวนมากที่ใช้การพิมพ์เป็นวิธีการส่งข้อความผิดพลาด ตัวอย่างเป็นไปได้หรือไม่ที่จะเข้าถึง 'word' จากการทำตาม PROC -- The PROC CREATE PROC usp_PrintWord AS PRINT 'word' // Some C# Code to would like to pull out 'word' SqlCommand cmd = new SqlCommand("usp_printWord", TheConnection); cmd.CommandType = CommandType.StoredProcedure; // string ProcPrint = ???

7
ขั้นตอนที่จัดเก็บช้าเมื่อเรียกจากเว็บอย่างรวดเร็วจาก Management Studio
ฉันมีขั้นตอนการจัดเก็บที่หมดเวลาอย่างบ้าคลั่งทุกครั้งที่เรียกจากเว็บแอปพลิเคชัน ฉันเริ่มใช้ Sql Profiler และติดตามการโทรที่หมดเวลาและในที่สุดก็พบสิ่งเหล่านี้: เมื่อดำเนินการคำสั่งจากภายใน MS SQL Management Studio โดยมีอาร์กิวเมนต์เดียวกัน (อันที่จริงฉันคัดลอกการเรียกโพรซีเดอร์จากการติดตามโปรไฟล์ sql และรัน): มันจะเสร็จสิ้นใน 5 ~ 6 วินาทีโดยเฉลี่ย แต่เมื่อเรียกจากเว็บแอปพลิเคชันจะใช้เวลานานกว่า 30 วินาที (ตามรอย) ดังนั้นหน้าเว็บของฉันจึงหมดเวลาจริง นอกเหนือจากข้อเท็จจริงที่ว่าเว็บแอปพลิเคชันของฉันมีผู้ใช้เป็นของตัวเองทุกสิ่งก็เหมือนกัน (ฐานข้อมูลเดียวกันการเชื่อมต่อเซิร์ฟเวอร์ ฯลฯ ) ฉันยังลองเรียกใช้แบบสอบถามโดยตรงในสตูดิโอกับผู้ใช้เว็บแอปพลิเคชันและใช้เวลาไม่เกิน 6 วินาที ฉันจะทราบได้อย่างไรว่าเกิดอะไรขึ้น ฉันคิดว่ามันไม่มีส่วนเกี่ยวข้องกับการที่เราใช้เลเยอร์ BLL> DAL หรืออะแดปเตอร์ตารางเนื่องจากการติดตามแสดงให้เห็นอย่างชัดเจนถึงความล่าช้าในขั้นตอนจริง นั่นคือทั้งหมดที่ฉันคิดได้ แก้ไขฉันพบในลิงค์นี้ว่า ADO.NET ตั้งค่าARITHABORTเป็นจริงซึ่งเป็นสิ่งที่ดีสำหรับเกือบตลอดเวลา แต่บางครั้งสิ่งนี้ก็เกิดขึ้นและวิธีแก้ปัญหาที่แนะนำคือการเพิ่มwith recompileตัวเลือกให้กับ proc ที่เก็บไว้ ในกรณีของฉันมันใช้ไม่ได้ แต่ฉันสงสัยว่ามันคล้ายกับสิ่งนี้มาก มีใครรู้บ้างว่า ADO.NET ทำอะไรอีกหรือหา spec …

6
อะไรคือความแตกต่างระหว่าง“ AS” และ“ IS” ในขั้นตอนการจัดเก็บของ Oracle?
ฉันเห็นบางครั้งโพรซีเดอร์ของ Oracle เขียนด้วย "AS" และบางครั้งก็มีคีย์เวิร์ด "IS" CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **AS** ... เทียบกับ CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **IS** ... มีความแตกต่างระหว่างทั้งสองหรือไม่? แก้ไข: เห็นได้ชัดว่าไม่มีความแตกต่างในการทำงานระหว่างทั้งสอง แต่บางคนปฏิบัติตามแบบแผนในการใช้ "AS" เมื่อ SP เป็นส่วนหนึ่งของแพ็กเกจและ "IS" เมื่อไม่ได้ หรืออีกทางหนึ่ง Meh.

4
T-SQL รับค่าที่เลือกของกระบวนงานที่เก็บไว้
ใน T-SQL อนุญาตให้ใช้: DECLARE @SelectedValue int SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 ดังนั้นจึงเป็นไปได้ที่จะรับค่าของ SELECT และใส่ไว้ในตัวแปร (หากเป็นสเกลาร์อย่างชัดเจน) ถ้าฉันใส่ตรรกะการเลือกเดียวกันในขั้นตอนการจัดเก็บ: CREATE PROCEDURE GetMyInt AS SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 ฉันสามารถรับผลลัพธ์ของกระบวนงานที่เก็บไว้นี้และบรรจุไว้ในตัวแปรได้หรือไม่ สิ่งที่ต้องการ: DECLARE @SelectedValue int SELECT @SelectedValue = EXEC GetMyInt (ฉันรู้ว่าไม่อนุญาตให้ใช้ไวยากรณ์ด้านบนเพราะฉันลองแล้ว!)

18
วิธีการเรียกเก็บโพรซีเดอร์จาก Java และ JPA
ฉันกำลังเขียนเว็บแอปพลิเคชันง่ายๆเพื่อเรียกขั้นตอนการจัดเก็บและดึงข้อมูลบางอย่าง มันเป็นแอปพลิเคชั่นที่ง่ายมากซึ่งโต้ตอบกับฐานข้อมูลของลูกค้า เราส่งรหัสพนักงานและรหัส บริษัท และขั้นตอนที่จัดเก็บจะส่งกลับรายละเอียดพนักงาน เว็บแอปพลิเคชันไม่สามารถอัปเดต / ลบข้อมูลและกำลังใช้ SQL Server ฉันกำลังปรับใช้เว็บแอปพลิเคชันของฉันใน Jboss AS ฉันควรใช้ JPA เพื่อเข้าถึงโพรซีเดอร์ที่เก็บไว้หรือCallableStatement. ข้อได้เปรียบของการใช้ JPA ในกรณีนี้ นอกจากนี้คำสั่ง sql จะเรียกโพรซีเดอร์ที่เก็บไว้นี้คืออะไร ฉันไม่เคยใช้ขั้นตอนการจัดเก็บมาก่อนและฉันกำลังดิ้นรนกับขั้นตอนนี้ Google ไม่ได้ให้ความช่วยเหลือมากนัก นี่คือขั้นตอนการจัดเก็บ: CREATE procedure getEmployeeDetails (@employeeId int, @companyId int) as begin select firstName, lastName, gender, address from employee et where et.employeeId = @employeeId and et.companyId = …

5
จะสร้าง Guid ใหม่ในขั้นตอนการจัดเก็บได้อย่างไร?
ขณะนี้ฉันมีขั้นตอนการจัดเก็บที่ฉันต้องการแทรกแถวใหม่ลงในตาราง insert into cars (id, Make, Model) values('A new Guid', "Ford", "Mustang") ดังนั้นคีย์หลัก 'id' จึงเป็น Guid ฉันรู้วิธีสร้าง Guid ใหม่ในรหัส C # แต่ภายในขั้นตอนการจัดเก็บฉันไม่แน่ใจว่าจะสร้าง Guids ใหม่สำหรับค่าคีย์หลักได้อย่างไร

3
ฉันสามารถสร้างมุมมองด้วยพารามิเตอร์ใน MySQL ได้หรือไม่
ฉันมีมุมมองเช่นนี้: CREATE VIEW MyView AS SELECT Column FROM Table WHERE Value = 2; ฉันต้องการทำให้มันกว้างขึ้นหมายถึงเปลี่ยน 2 เป็นตัวแปร ฉันลองสิ่งนี้: CREATE VIEW MyView AS SELECT Column FROM Table WHERE Value = @MyVariable; แต่ MySQL ไม่อนุญาต ฉันพบวิธีแก้ปัญหาที่น่าเกลียด: CREATE FUNCTION GetMyVariable() RETURNS INTEGER DETERMINISTIC NO SQL BEGIN RETURN @MyVariable; END| จากนั้นมุมมองคือ: CREATE VIEW MyView AS …

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