سؤال

وأنا أحاول أن الاستعلام عن قائمة تعريفات الإجراء المخزن باستخدام information_schema.routines الموجودة في قاعدة بيانات واحدة ولكن ليس في بلد آخر.

SELECT 
    t1.Routine_Definition
FROM
    [server1].MyDatabase.INFORMATION_SCHEMA.Routines t1 
LEFT JOIN
    [server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
    t2.Routine_Name is null

و
هذا يعطيني تعريفات الاستعلام في سطر واحد حتى عندما يكون لدي تعليق مثل هذا

--Some comment
SELECT Column
FROM Somewhere

ويحصل علق SQL خارجا وأنا لا يمكن استخدام تعريف لإنشاء SP.

وكيف يمكنني تحليل هذه العودة مع فواصل الأسطر المناسبة؟
أو
هل هناك طريقة أفضل للحصول على هذه البرامج النصية (باستخدام كود)؟

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

المحلول

ويتم عرض الإجراء المخزن فقط على سطر واحد في إدارة Studio. إذا قمت بتشغيل الاستعلام مع النتائج إلى النص، أو استخدام ما يلي، سوف تحصل الخط الصحيح فواصل:

declare @sql varchar(8000) -- varchar(max) in SQL 2005+

SELECT 
        @sql = t1.Routine_Definition
FROM
        INFORMATION_SCHEMA.Routines t1 

print @sql

نصائح أخرى

DECLARE MY_CURSOR Cursor
FOR

SELECT 
        t1.Routine_Definition
FROM
        [server1].MyDatabase.INFORMATION_SCHEMA.Routines t1 
LEFT JOIN
        [server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
        t2.Routine_Name is null AND
        LEN(t1.Routine_Definition) < 4000



Open My_Cursor
DECLARE @sql VARCHAR(MAX) 

FETCH NEXT FROM MY_Cursor INTO @sql
While (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)

Print @sql

FETCH NEXT FROM MY_CURSOR INTO @sql
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO

وهنا هو كيف لي أن تنفيذ حل المسيخ في ...

والرأي INFORMATION_SCHEMA يعود فقط الأحرف 4000 الأولى في التعريف. (ومن الناحية المثالية لديك متعود SP التي هي فترة طويلة) هل تريد أن السيناريو تلك يدويا أو بطريقة أخرى.

وأعتقد أن أسهل طريقة للحصول على الإجراءات المخزنة لاستخدام أداة الاستيراد / التصدير المضمن في SQL Server إدارة Studio. من هناك يمكنك تصدير بك كائنات إجراء مخزن في إطار التعليمات البرمجية أو إلى ملف التي يمكن تشغيلها على الفور.

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