2012-09-28 7 views

risposta

55

Si può provare questa query in un dato database di SQL Server:

SELECT 
    name, 
    create_date, 
    modify_date 
FROM sys.procedures 
WHERE create_date = '20120927' 

che elenca il nome, la creazione e la data dell'ultima modifica - purtroppo, non registra che creato e/o modificato la stored procedure in questione.

+0

Grazie. Potresti per favore espandere questa risposta includendo anche come amarla per le funzioni definite dall'utente? – Lijo

+1

@Lijo: [vedi la mia domanda "Perché non esiste una vista del catalogo' sys.functions'? "] (Http://stackoverflow.com/questions/468672/sql-server-where-is-sys-functions) - the risposta accettata ti mostra come ottenere i vari tipi di funzioni da 'sys.objects' –

3
SELECT name 
FROM sys.objects 
WHERE type = 'P' 
AND (DATEDIFF(D,modify_date, GETDATE()) < 7 
    OR DATEDIFF(D,create_date, GETDATE()) < 7) 
12

Ecco la versione "nuova scuola".

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_TYPE = N'PROCEDURE' and ROUTINE_SCHEMA = N'dbo' 
and CREATED = '20120927' 
+0

Puoi fornire qualche fonte che dichiari che l'uso di' INFORMATION_SCHEMA' sarebbe attualmente il modo preferito (o "scuola nuova")? – bvgheluwe

+2

Non ho detto "preferito". "Più recente", come in, è diventato disponibile più avanti nel tempo. E iniziato con Sql Server 2005. http://msdn.microsoft.com/en-us/library/ms186778%28v=sql.90%29.aspx L'unico piccolo vantaggio sarebbe se si gestiscono più sistemi RDBMS, quindi si stiamo imparando uno standard, non un metodo proprietario. http://en.wikipedia.org/wiki/Information_schema – granadaCoder

0

Modificata la prima query per più oggetti: tabelle, viste, UDF, SP e così via. È possibile aggiungere i propri tipi di oggetto.

DECLARE @OldSchema AS VARCHAR(255); 
DECLARE @NewSchema AS VARCHAR(255); 

SET @OldSchema = 'dbo'; 
SET @NewSchema = 'new_dbo'; 

DECLARE @sql AS VARCHAR(MAX); 
DECLARE @sqlTmp AS VARCHAR(MAX); 

SET @sql = 'CREATE SCHEMA [' + @NewSchema + ']' + CHAR(13) + CHAR(10); 

PRINT @sql; 

DECLARE @a INT = 1; 
WHILE (@a < 1000000) 
    BEGIN 

     SET @sqlTmp = ''; 

     SELECT @sqlTmp = 'ALTER SCHEMA [' + @NewSchema + '] TRANSFER [' 
       + s_name + '].[' + o_name + ']' 
     FROM (SELECT s.name s_name , 
          o.name o_name , 
          ROW_NUMBER() OVER (ORDER BY o.object_id) r 
        FROM  sys.objects o 
          JOIN sys.schemas s ON o.schema_id = s.schema_id 
        WHERE  s.name = @OldSchema 
          AND o.type IN ('P', 'U', 'V', 'IF', 'TF', 'FN') 
       ) a 
     WHERE r = @a; 

     IF (@@ROWCOUNT = 0) 
      SET @a = 100000000; 

     SET @a = @a + 1; 
     SET @sql = @sql + COALESCE(@sqlTmp, '') + CHAR(13) + CHAR(10); 

     PRINT @sqlTmp; 

    END; 
SET @sql = @sql + 'DROP SCHEMA [' + @OldSchema + ']'; 
PRINT 'DROP SCHEMA [' + @OldSchema + ']'; 
0
SELECT * FROM sys.objects WHERE type='p' ORDER BY modify_date DESC 

SELECT name, create_date, modify_date 
FROM sys.objects 
WHERE type = 'P' 

SELECT name, crdate, refdate 
FROM sysobjects 
WHERE type = 'P' 
ORDER BY refdate desc 
+0

Ciao Abhik kashyap singh e benvenuto su Stack Overflow. Ho un commento sulla tua risposta: il tuo codice potrebbe essere corretto, ma con qualche contesto sarebbe una risposta migliore; ad esempio, potresti spiegare come e perché questo cambiamento proposto risolverà il problema del questionario, forse includendo un link alla documentazione pertinente. Ciò lo renderebbe più utile per loro e anche più utile per altri lettori di siti che sono alla ricerca di soluzioni a problemi simili. –

0

Per SQL Server 2012:

SELECT name, modify_date, create_date, type 
FROM sys.procedures 
WHERE name like '%XXX%' 
ORDER BY modify_date desc 
Problemi correlati