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

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

29
แทรกผลลัพธ์ของกระบวนงานที่เก็บไว้ในตารางชั่วคราว
ฉันจะทำSELECT * INTO [temp table] FROM [stored procedure]อย่างไร ไม่ได้FROM [Table]และไม่มีการกำหนด[temp table]? Select ข้อมูลทั้งหมดจาก BusinessLineไปยังtmpBusLineทำงานได้ดี select * into tmpBusLine from BusinessLine ฉันพยายามแบบเดียวกัน แต่ใช้ stored procedureที่คืนค่านั้นไม่เหมือนกัน select * into tmpBusLine from exec getBusinessLineHistory '16 Mar 2009' ข้อความที่ส่งออก: ข่าวสารเกี่ยวกับ 156, ระดับ 15, สถานะ 1, บรรทัด 2 ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก 'exec' ฉันได้อ่านหลายตัวอย่างของการสร้างตารางชั่วคราวที่มีโครงสร้างเดียวกันกับขั้นตอนการจัดเก็บผลลัพธ์ที่ทำงานได้ดี แต่มันจะดีที่จะไม่ให้คอลัมน์ใด ๆ

19
ฟังก์ชันกับกระบวนงานที่เก็บไว้ใน SQL Server
ฉันได้เรียนรู้ฟังก์ชั่นและขั้นตอนการจัดเก็บมาระยะหนึ่งแล้ว แต่ฉันไม่ทราบสาเหตุและเวลาที่ฉันควรใช้ฟังก์ชั่นหรือขั้นตอนการจัดเก็บ พวกเขาดูเหมือนฉันอาจเป็นเพราะฉันเป็นมือใหม่เกี่ยวกับเรื่องนั้น บางคนบอกฉันได้ไหมว่าเพราะอะไร

22
ค้นหาข้อความในกระบวนงานที่เก็บไว้ใน SQL Server
ฉันต้องการค้นหาข้อความจากขั้นตอนการจัดเก็บฐานข้อมูลทั้งหมดของฉัน ฉันใช้ SQL ด้านล่าง: SELECT DISTINCT o.name AS Object_Name, o.type_desc FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id WHERE m.definition Like '%[ABD]%'; ฉันต้องการค้นหา[ABD]ในกระบวนงานที่เก็บไว้ทั้งหมดรวมถึงวงเล็บเหลี่ยม แต่ไม่ได้ให้ผลลัพธ์ที่เหมาะสม ฉันจะเปลี่ยนคำถามเพื่อให้บรรลุสิ่งนี้ได้อย่างไร


18
เลือกคอลัมน์จากชุดผลลัพธ์ของกระบวนงานที่เก็บไว้
ฉันมีขั้นตอนการจัดเก็บที่ส่งคืน 80 คอลัมน์และ 300 แถว ฉันต้องการเขียนตัวเลือกที่ได้รับ 2 ของคอลัมน์เหล่านั้น สิ่งที่ต้องการ SELECT col1, col2 FROM EXEC MyStoredProc 'param1', 'param2' เมื่อฉันใช้ไวยากรณ์ข้างต้นฉันได้รับข้อผิดพลาด: "ชื่อคอลัมน์ไม่ถูกต้อง" ฉันรู้ว่าวิธีที่ง่ายที่สุดคือเปลี่ยนกระบวนงานที่เก็บไว้ แต่ฉันไม่ได้เขียนและไม่สามารถเปลี่ยนแปลงได้ มีวิธีทำสิ่งที่ฉันต้องการหรือไม่? ฉันสามารถสร้างตารางชั่วคราวเพื่อใส่ผลลัพธ์ แต่เนื่องจากมี 80 คอลัมน์ดังนั้นฉันจึงต้องสร้างตารางอุณหภูมิคอลัมน์ 80 เพื่อให้ได้ 2 คอลัมน์ ฉันต้องการหลีกเลี่ยงการติดตามคอลัมน์ทั้งหมดที่ส่งคืน ฉันลองใช้WITH SprocResults AS ....ตามคำแนะนำของ Mark แต่มีข้อผิดพลาด 2 ข้อ ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก 'EXEC' ไวยากรณ์ไม่ถูกต้องใกล้กับ ')' ฉันพยายามประกาศตัวแปรตารางและฉันพบข้อผิดพลาดดังต่อไปนี้ ข้อผิดพลาดการแทรก: ชื่อคอลัมน์หรือจำนวนค่าที่ให้มาไม่ตรงกับคำนิยามของตาราง หากฉันลอง SELECT * FROM …

5
SQL Server SELECT ลงในตารางที่มีอยู่
ฉันกำลังพยายามเลือกเขตข้อมูลจากตารางหนึ่งและแทรกลงในตารางที่มีอยู่จากกระบวนงานที่เก็บไว้ นี่คือสิ่งที่ฉันพยายาม: SELECT col1, col2 INTO dbo.TableTwo FROM dbo.TableOne WHERE col3 LIKE @search_key ฉันคิดว่าSELECT ... INTO ...สำหรับตารางชั่วคราวซึ่งเป็นสาเหตุที่ฉันได้รับข้อผิดพลาดที่dbo.TableTwoมีอยู่แล้ว ฉันจะแทรกหลายแถวdbo.TableOneเข้าในได้dbo.TableTwoอย่างไร?

14
SQL Server - SELECT จากกระบวนงานที่เก็บไว้
ฉันมีขั้นตอนการจัดเก็บที่ส่งคืนแถว: CREATE PROCEDURE MyProc AS BEGIN SELECT * FROM MyTable END ขั้นตอนจริงของฉันนั้นซับซ้อนกว่าเล็กน้อยซึ่งเป็นเหตุผลว่าทำไมจึงจำเป็นต้องมีสไปรค เป็นไปได้หรือไม่ที่จะเลือกเอาต์พุตโดยเรียกโพรซีเดอร์นี้? สิ่งที่ต้องการ: SELECT * FROM (EXEC MyProc) AS TEMP ฉันต้องใช้SELECT TOP X, ROW_NUMBERและอีกWHEREข้อที่หน้าข้อมูลของฉันและฉันไม่ต้องการที่จะผ่านค่าเหล่านี้เป็นพารามิเตอร์


16
ขั้นตอนการจัดเก็บคืออะไร?
"ขั้นตอนการจัดเก็บ"คืออะไรและทำงานอย่างไร การแต่งหน้าของกระบวนงานที่เก็บไว้คืออะไร (สิ่งที่แต่ละอย่างจะต้องเป็นขั้นตอนการจัดเก็บ)

11
วิธีการส่งผ่านอาร์เรย์ไปยัง SQL Server ที่เก็บไว้ในกระบวนงาน
วิธีการส่งอาร์เรย์ไปยัง SQL Server ที่เก็บไว้ในกระบวนงาน? ตัวอย่างเช่นฉันมีรายชื่อพนักงาน ฉันต้องการใช้รายการนี้เป็นตารางและเข้าร่วมกับตารางอื่น แต่รายชื่อพนักงานควรถูกส่งผ่านเป็นพารามิเตอร์จาก C #

18
วิธีตรวจสอบว่ามีขั้นตอนการจัดเก็บอยู่ก่อนสร้าง
ฉันมีสคริปต์ SQL ที่ต้องรันทุกครั้งที่ไคลเอ็นต์เรียกใช้งานฟังก์ชัน "การจัดการฐานข้อมูล" สคริปต์รวมถึงการสร้างกระบวนงานที่เก็บไว้ในฐานข้อมูลลูกค้า ไคลเอนต์เหล่านี้บางส่วนอาจมีกระบวนงานที่เก็บไว้เมื่อเรียกใช้สคริปต์และบางอย่างอาจไม่ ฉันต้องมีขั้นตอนการจัดเก็บที่ขาดหายไปเพิ่มไว้ในฐานข้อมูลลูกค้า แต่ไม่สำคัญว่าฉันพยายามงอไวยากรณ์ T-SQL มากแค่ไหน CREATE / ALTER PROCEDURE 'ต้องเป็นคำสั่งแรกในชุดการสืบค้น ฉันได้อ่านสิ่งนั้นก่อนที่จะสร้างผลงาน แต่ฉันไม่ชอบที่จะทำแบบนั้น IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'MyProc') DROP PROCEDURE MyProc GO CREATE PROCEDURE MyProc ... ฉันจะเพิ่มการตรวจสอบการมีอยู่ของกระบวนงานที่เก็บไว้และสร้างมันได้อย่างไรถ้ามันไม่มีอยู่ แต่จะแก้ไขหากมีอยู่?

30
ข้อดีและข้อเสียของการรักษา SQL ไว้ใน Procs ที่จัดเก็บกับรหัส [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน6 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ อะไรคือข้อดี / ข้อเสียของการเก็บ SQL ไว้ในซอร์สโค้ด C # ของคุณหรือในโพรบ Procs ฉันได้คุยเรื่องนี้กับเพื่อนในโครงการโอเพนซอร์สที่เรากำลังดำเนินการอยู่ (ฟอรัม C # ASP.NET) ในขณะนี้การเข้าถึงฐานข้อมูลส่วนใหญ่ทำได้โดยการสร้าง SQL แบบอินไลน์ใน C # และเรียกไปยัง SQL Server DB ดังนั้นฉันจึงพยายามกำหนดว่าโครงการไหนดีที่สุดสำหรับโครงการนี้ จนถึงตอนนี้ฉันมี: ข้อดีสำหรับในรหัส: บำรุงรักษาง่ายขึ้น - ไม่จำเป็นต้องเรียกใช้สคริปต์ SQL เพื่ออัปเดตคิวรี ง่ายต่อการย้ายไปยังฐานข้อมูลอื่น - ไม่มีโปรแกรมไปยังพอร์ต ข้อดีสำหรับ Procs ที่เก็บไว้: ประสิทธิภาพ ความปลอดภัย

21
วิธีการเรียกกระบวนงานที่เก็บไว้ใน Entity Framework 6 (รหัสแรก)?
ฉันใหม่มากสำหรับ Entity Framework 6 และฉันต้องการใช้ขั้นตอนการจัดเก็บในโครงการของฉัน ฉันมีขั้นตอนการจัดเก็บดังนี้ ALTER PROCEDURE [dbo].[insert_department] @Name [varchar](100) AS BEGIN INSERT [dbo].[Departments]([Name]) VALUES (@Name) DECLARE @DeptId int SELECT @DeptId = [DeptId] FROM [dbo].[Departments] WHERE @@ROWCOUNT > 0 AND [DeptId] = SCOPE_IDENTITY() SELECT t0.[DeptId] FROM [dbo].[Departments] AS t0 WHERE @@ROWCOUNT > 0 AND t0.[DeptId] = @DeptId END Department …

12
SQL Server: ค้นหาอย่างรวดเร็ว แต่ช้าจากขั้นตอน
แบบสอบถามทำงานเร็ว: DECLARE @SessionGUID uniqueidentifier SET @SessionGUID = 'BCBA333C-B6A1-4155-9833-C495F22EA908' SELECT * FROM Report_Opener WHERE SessionGUID = @SessionGUID ORDER BY CurrencyTypeOrder, Rank ค่าใช้จ่ายย่อย: 0.502 แต่การวาง SQL ตัวเดียวกันในโพรซีเดอร์ที่เก็บไว้จะรันช้าและด้วยแผนการดำเนินการที่แตกต่างกันโดยสิ้นเชิง CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS SELECT * FROM Report_Opener WHERE SessionGUID = @SessionGUID ORDER BY CurrencyTypeOrder, Rank EXECUTE ViewOpener @SessionGUID ราคาย่อย: 19.2 ฉันวิ่ง sp_recompile …

12
วิธีรันโพรซีเดอร์ที่เก็บภายในโปรแกรม C #
ฉันต้องการรันโพรซีเดอร์ที่เก็บไว้นี้จากโปรแกรม C # ฉันได้เขียนขั้นตอนการจัดเก็บต่อไปนี้ในหน้าต่างแบบสอบถาม SqlServer และบันทึกเป็นที่เก็บไว้ 1: use master go create procedure dbo.test as DECLARE @command as varchar(1000), @i int SET @i = 0 WHILE @i < 5 BEGIN Print 'I VALUE ' +CONVERT(varchar(20),@i) EXEC(@command) SET @i = @i + 1 END แก้ไข: using System; using System.Collections.Generic; using System.Text; using …

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