سؤال

ولدي هذا البرنامج النصي:

select name,create_date,modify_date from sys.procedures order by modify_date desc

وأستطيع أن أرى ما الإجراءات تم تعديلها مؤخرا. وسوف تضيف "حيث modify_date> =" وأود أن استخدام بعض الإجراءات النظام المخزن، من شأنها أن تولد لي: قطرة إنشاء + مخطوطات ل (دعنا نقول 5 مطابقة) الإجراءات المخزنة

هل يمكنني القيام بذلك بطريقة أو بأخرى؟

وذلك بفضل


وطيب. لدي النسخة النهائية:

http://swooshcode.blogspot.com /2008/10/generate-stored-procedures-scripts-for.html

ساعد

ويا رفاق الكثير

وذلك بفضل

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

المحلول

وهذه ليست جميلة، ولكنه يعمل. تشغيل الإخراج من يدويا أو تنفيذه مع المخزن sp_executesql.

SELECT OBJECT_DEFINITION(object_id), 'drop procedure [' + name + ']'
FROM   sys.procedures
WHERE modify_date >= @date

وسيكون لديك ما يدعو للقلق الحقوق الضائعة كذلك.

نصائح أخرى

ولا المؤشر ضروريا (تعديل كما هو مطلوب للمخططات، الخ):

DECLARE @dt AS datetime
SET @dt = '10/1/2008'

DECLARE @sql AS varchar(max)

SELECT @sql = COALESCE(@sql, '')
    + '-- ' + o.name + CHAR(13) + CHAR(10)
    + 'DROP PROCEDURE ' + o.name + CHAR(13) + CHAR(10)
    + 'GO' + CHAR(13) + CHAR(10)
    + m.definition + CHAR(13) + CHAR(10)
    + 'GO' + CHAR(13) + CHAR(10)
FROM sys.sql_modules AS m
INNER JOIN sys.objects AS o
    ON m.object_id = o.object_id
INNER JOIN sys.procedures AS p
    ON m.object_id = p.object_id
WHERE p.modify_date >= @dt

PRINT @sql -- or EXEC (@sql)

هل يمكن استخدام المؤشر إلى تكرار خلال كل سجل:

DECLARE @spName NVARCHAR(128)
DECLARE myCursor CURSOR FOR SELECT name FROM sys.procedures ORDER BY modify_date DESC
OPEN myCursor
FETCH NEXT FROM myCursor INTO @spName
WHILE @@fetch_status = 0
BEGIN
    -- Process each stored procedure with a dynamic query
    PRINT @spName
FETCH NEXT FROM myCursor INTO @spName
END
CLOSE myCursor
DEALLOCATE myCursor

وفي الوقت نفسه فعلت بعض الحفر، ويبدو وكأنه

sp_helptext 'my_stored_procedure'

وهذا ما أحتاج، (بالإضافة إلى الجزء الذي كنت أعرف بالفعل عندما سألت السؤال وأوضح أكثر من jdecuyper)

ومن الأفضل القيام بذلك بلغة أكثر ملاءمة من SQL. وعلى الرغم من امتداداته المتعددة مثل T-SQL، PL / SQL، وPL / pgSQL، SQL ليس هو أفضل شيء لهذه المهمة.

وهنا هو ارتباط إلى مثل هذا السؤال، وجوابي، الذي كان لاستخدام SQL-DMO أو SMO، اعتمادا على ما إذا كان لديك SQL 2000 أو 2005.

كيفية نسخ قاعدة بيانات مع c #

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