خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


چگونه خروجی یک Stored Procedure را در یک جدول موقت ذخیره کنیم

چگونه خروجی یک Stored Procedure را در یک جدول موقت ذخیره کنیم
به عنوان فردی برنامه نویس ممکن است در شرایطی نیاز به این داشته باشید که از یک stored procedure خروجی با فرمت Table گرفته و آن را در یک Temp table ذخیره کنید. اگر در چنین شرایطی هستید، در ادامه راه آن را خواهید دید که چگونه خروجی یک Stored Procedure را در یک جدول موقت بریزید. یکی از ساده ترین راه ها استفاده از یک تابع OPENROWSET است. این روش خصوصا در جایی که از صحت خروجی stored procedure مطمئن نیستید، می تواند کاربردی باشد و ضمن اینکه از خطاهای رخ داده و عیب یابی خطاها هم می توانید مطلع شوید.

سیستم یکپارچۀ سازمانی راهکار
برای شروع، یک stored procedure ایجاد می کنیم که خروجی یا result set ررا برگرداند.



/* Create a stored procedure */
CREATE PROCEDURE mtbGetPeople
AS
BEGIN
Select
FullName,
PhoneNumber,
EmailAddress
from Application.People
END
GO

این SP تستی است و شما باید فیلدهایی از یک جدول دیتابیس تان را در SP قید کنید که واقعی باشد. با استفاده از تابع OPENROWSET، قادر خواهید بود که نتایج stored procedure را در یک جدول موقت ثبت و ذخیره کنید.

SELECT *
INTO #People
FROM OPENROWSET('SQLNCLI',
'Server=MACWINDOWS;Trusted_Connection=yes;',
'EXEC WideWorldImporters.dbo.mtbGetPeople')
GO

Select * from #People
GO

Drop Table #People
GO

به جای MACWINDOWS، باید نام instance اس کیو ال سرور مورد نظر را جایگزین کنید اگر به OPENROWSET در کوئری های فوق دقت کنید، نام stored procedure به همراه نام بانک اطلاعاتی و نام schema مشخص شده که بدون آنها ممکن است با خطای Could not find stored procedure مواجه شوید.

چگونه خروجی یک Stored Procedure را در یک جدول موقت ذخیره کنیم . آموزشگاه رایگان خوش آموز

خب، گاها در اجرای چنین سناریهایی ممکن است با خطاهای مختلفی مواجه شوید.

Msg 15281, Level 16, State 1, Line 21
SQL Server blocked access to STATEMENT ‘OpenRowset/OpenDatasource’ of component ‘Ad Hoc Distributed Queries’ because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of ‘Ad Hoc Distributed Queries’ by using sp_configure. For more information about enabling ‘Ad Hoc Distributed Queries’, search for ‘Ad Hoc Distributed Queries’ in SQL Server Books Online.

خب، اگر با ارور فوق مواجه شدید، باید کامپیوننت Ad Hoc Distributed Queries در پیکربندی فعال کنید.
برای فعال کردن Ad Hoc Distributed Queries در lobal configuration settings، همین کوئری زیر را کپی و Execute کنید.

sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

خب، خطای دیگری که ممکن است در این شرایط با آن مواجه شوید، خطای زیر می باشد:

Msg 11529, Level 16, State 1, Procedure sys.sp_describe_first_result_set, Line 1 [Batch Start Line 20]The metadata could not be determined because every code path results in an error; see previous errors for some of these.Msg 2812, Level 16, State 62, Procedure sys.sp_describe_first_result_set, Line 1 [Batch Start Line 20]Could not find stored procedure ‘yourdatabasename’.

اگر stored procedure را بدون نام database و نام schema در EXEC قید کرده باشید، خطای فوق را دریافت خواهید کرد. برای جلوگیری از این خطا باید چنین فرمتی، SP را Run کنید.

EXEC [Database_Name].[Schema_Name].Stored_Procedure


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز