1

我有這樣的腳本:生成多重過濾滴+創建存儲過程

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

你們幫助了很多

感謝

回答

2

此泉很漂亮,但它的工作原理。手動運行輸出或使用sp_executesql執行它。

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

您將不得不擔心失去的權利。

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 
+0

這是我的想法也,但我認爲可能存在一個系統存儲過程,這是做: - 處理每個存儲過程與動態查詢 部分......你知道我的意思嗎? (必須有像sp_generatesp'sp_myproc'...我猜) – Swoosh 2008-10-09 12:57:36

0

同時,我做了一些挖掘,並且好像

sp_helptext 'my_stored_procedure' 

正是我需要的,(加上我已經知道,當我問這個問題的部分由jdecuyper解釋更多)

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) 
0

這最好用比SQL更合適的語言完成。儘管有很多擴展,如T-SQL,PL/SQL和PL/pgSQL,但SQL不是這項任務的最佳選擇。

下面是一個類似的問題的鏈接,和我的答案,這是使用SQL-DMO或SMO,這取決於你是否有SQL 2000或2005

How to copy a database with c#