1

私はこのスクリプトを持っています:

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

最近変更された手順を確認できます。「where modify_date >=」を追加しますそして、私を生成するシステムストアドプロシージャを使用したいと思います:ドロップ+(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

その間、私は掘り下げましたが、次のようです

sp_helptext 'my_stored_procedure'

必要なものです(さらに、質問をしたときにすでに知っていた部分は、jdecuyperによって詳しく説明されています)

于 2008-10-09T13:09:15.953 に答える
0

これは、SQL よりも適切な言語で行うのが最適です。T-SQL、PL/SQL、PL/pgSQL などの多数の拡張機能にもかかわらず、SQL はこのタスクに最適なものではありません。

同様の質問へのリンクと、SQL 2000 または 2005 のどちらを使用しているかに応じて、SQL-DMO または SMO を使用するという私の回答です。

C# でデータベースをコピーする方法

于 2008-10-09T13:53:40.437 に答える
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 に答える