Генерация нескольких и отфильтрованных Drop + Создать хранимые процедуры - PullRequest
1 голос
/ 09 октября 2008

У меня есть этот скрипт:

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

Я вижу, какие процедуры были изменены в последнее время. Я добавлю "где modify_date> =" И я хотел бы использовать некоторые системные хранимые процедуры, которые будут генерировать меня: drop + создать сценарии для (скажем, 5 соответствующих) хранимых процедур

Могу ли я сделать это как-нибудь?

спасибо


ки. у меня есть окончательная версия:

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

Вы, ребята, очень помогли

спасибо

Ответы [ 5 ]

2 голосов
/ 09 октября 2008

Это не красиво, но работает. Запустите вывод из него вручную или выполните его с помощью sp_executesql.

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

Вам также придется беспокоиться о потерянных правах.

1 голос
/ 09 октября 2008

Курсор не требуется (измените по желанию для схем и т. Д.):

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)
0 голосов
/ 09 октября 2008

Лучше всего это сделать на более подходящем языке, чем SQL. Несмотря на многочисленные расширения, такие как T-SQL, PL / SQL и PL / pgSQL, SQL не является лучшим решением для этой задачи.

Вот ссылка на аналогичный вопрос и мой ответ, который должен был использовать SQL-DMO или SMO, в зависимости от того, используете ли вы SQL 2000 или 2005.

Как скопировать базу данных с помощью c #

0 голосов
/ 09 октября 2008

между тем я немного покопался и похоже

sp_helptext 'my_stored_procedure'

- это то, что мне нужно (плюс та часть, которую я уже знал, когда задавал вопрос, более подробно описанный jdecuyper)

0 голосов
/ 09 октября 2008

Вы можете использовать курсор для перебора каждой записи:

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
...