هل من الممكن فحص محتويات معلمة قيمة الجدول عبر مصحح الأخطاء؟
-
25-09-2019 - |
سؤال
هل يعرف أي شخص ما إذا كان من الممكن استخدام استوديو 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'
هناك حل أعتقد أنه يمكنك إنشاء إجراء آخر مخزّن وملء معلمة قيمة الجدول والاستدعاء الإجراء الرئيسي الخاص بك ثم تبدأ تصحيح الأخطاء من إجراء الاختبار الذي أجريته.