1

我有这个脚本:

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

我可以看到最近修改了哪些程序。我将添加一个“where modify_date >=”并且我想使用一些系统存储过程,这将生成我:drop + create scripts for the(比如说 5 个匹配的)存储过程

我能以某种方式做到这一点吗?

谢谢


行。我有最终版本:

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

你们帮了很多忙

谢谢

4

5 回答 5

2

这不漂亮,但它有效。手动运行它的输出或使用 sp_executesql 执行它。

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

您还必须担心失去权利。

于 2008-10-09T12:47:15.077 回答
1

不需要游标(根据需要修改模式等):

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)
于 2008-10-09T13:30:01.327 回答
0

您可以使用游标遍历每条记录:

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
于 2008-10-09T12:37:54.083 回答
0

同时我做了一些挖掘,看起来像

sp_helptext 'my_stored_procedure'

是我需要的,(加上当我问 jdecuyper 更多解释的问题时我已经知道的部分)

于 2008-10-09T13:09:15.953 回答
0

这最好用比 SQL 更合适的语言来完成。尽管有许多扩展,例如 T-SQL、PL/SQL 和 PL/pgSQL,但 SQL 并不是完成这项任务的最佳选择。

这是一个类似问题的链接,我的回答是使用 SQL-DMO 或 SMO,具体取决于您使用的是 SQL 2000 还是 2005。

如何使用c#复制数据库

于 2008-10-09T13:53:40.437 回答