هل من الممكن فحص محتويات معلمة قيمة الجدول عبر مصحح الأخطاء؟

StackOverflow https://stackoverflow.com/questions/3004826

سؤال

هل يعرف أي شخص ما إذا كان من الممكن استخدام استوديو Visual Studio / SQL Server Management لتفقد محتويات معلمة قيمة الجدول التي تم تمريرها إلى إجراء مخزن؟

لإعطاء مثال تافهة:

CREATE TYPE [dbo].[ControllerId] AS TABLE(
    [id] [nvarchar](max) NOT NULL
)
GO

CREATE PROCEDURE [dbo].[test]
    @controllerData [dbo].[ControllerId] READONLY
AS
BEGIN
    SELECT COUNT(*) FROM @controllerData;
END

DECLARE @SampleData as [dbo].[ControllerId];
INSERT INTO @SampleData ([id]) VALUES ('test'), ('test2');

exec [dbo].[test] @SampleData;  

باستخدام ما سبق مع نقطة استراحة في بيان EXEC ، أتمكن من الدخول إلى الإجراء المخزن دون أي مشكلة. يوضح مصحح الأخطاء أن ControllerData Local لديه قيمة "(الجدول)" ، لكنني لم أجد أي أداة تسمح لي بعرض الصفوف الفعلية التي تشكل هذا الجدول.

هل كانت مفيدة؟

المحلول

نظرًا لأنك لا تحصل على فرح من مصحح الأخطاء ، فإليك اقتراحي. يمكنك إضافة إدخال varaable لتحديد ما إذا كان في وضع الاختبار أم لا. ثم إذا كان في TestMode ، قم بتشغيل SELECT في الجزء العلوي من SP لمعرفة ما هي البيانات.

CREATE TYPE [dbo].[ControllerId] AS TABLE( 
    [id] [nvarchar](max) NOT NULL 
) 
GO 

CREATE PROCEDURE [dbo].[jjtest] 
    (@controllerData [dbo].[ControllerId] READONLY 
    , @test bit = null)
AS 
IF @test = 1
BEGIN
SELECT * FROM  @controllerData
END
BEGIN 
    SELECT COUNT(*) FROM @controllerData; 
END 
GO

DECLARE @SampleData as [dbo].[ControllerId]; 
INSERT INTO @SampleData ([id]) VALUES ('test'), ('test2'); 

EXEC [dbo].[jjtest] @SampleData, 1;  

نصائح أخرى

لم أحقق أي نجاح في محاولة لفعل نفس ما وصفته. لذلك أعتقد أنه غير ممكن بعد. سوف تنتظر SSMS 2010

ليس من الممكن لمتغيرات الجدول ، لكنني بنيت إجراء والتي ستعرض محتوى جدول مؤقت من اتصال قاعدة بيانات أخرى. (وهو أمر غير ممكن مع الاستفسارات العادية). لاحظ أنه يستخدم DBCC PAGE والتتبع الافتراضي للوصول إلى البيانات بحيث استخدمها فقط لأغراض تصحيح الأخطاء.

يمكنك استخدامه عن طريق وضع نقطة توقف في الكود الخاص بك ، وفتح اتصال آخر والاتصال:

exec sp_select 'tempdb..#mytable'

هناك حل أعتقد أنه يمكنك إنشاء إجراء آخر مخزّن وملء معلمة قيمة الجدول والاستدعاء الإجراء الرئيسي الخاص بك ثم تبدأ تصحيح الأخطاء من إجراء الاختبار الذي أجريته.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top