none
DB Master sys.dm_db_index_physical_stats SQL2008R2 RRS feed

  • Domanda

  • Perche solamente su un DB  ( SQL2008R2Express ) non
    riesco ad eseguire questa query

    USE Ar09D;
    GO
    SELECT a.index_id, name, avg_fragmentation_in_percent
    FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(N'Fo'),
         NULL, NULL, NULL) AS a
        JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;
    GO
    

    Dove  "Ar09D" è il DB   e "Fo" è il nome della tabella


    l'errore restituito è questo

    ___ Messaggio 102, livello 15, stato 1, riga 2
    ___ Sintassi non corretta in prossimità di '('.

     

    Ritengo che la causa dell'errore sia la funzione di origine

    USE Ar09D;
    GO
    SELECT *
    FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)
    GO
    


    che mi restituisce sempre lo stesso errore esposto sopra

     


    se al posto di "DB_ID()"  scrivo "NULL" 
    il tutto funziona a livello di sintassi
    ma non restituisce quello che voglio

     

     

     

    Al solito grazie per il vostro impegno

     

    martedì 3 gennaio 2012 05:33

Risposte

  • l'errore restituito è questo

    ___ Messaggio 102, livello 15, stato 1, riga 2
    ___ Sintassi non corretta in prossimità di '('.

    Ciao,

    I Books Online riportano: "The built-in function DB_ID can be specified. When using DB_ID without specifying a database name, the compatibility level of the current database must be 90. "

    Quindi, verifica che il compatibility level del db non sia inferiore a 90 (SQL Server 2005).

    Questo è uno script che riproduce il problema:

    CREATE DATABASE foo;
    GO
    
    ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;
    GO
    
    USE foo;
    GO
    
    SELECT *
    FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL);
    
    /* Output:
    
    Msg 102, Level 15, State 1, Line 2
    Incorrect syntax near '('.
    
    */
    
    ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 100;
    GO
    
    SELECT *
    FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL);
    
    /* Output:
    
    database_id object_id...
    ----------- --------- 
    
    (0 row(s) affected)
    
    */
    
    USE master;
    
    DROP DATABASE foo;
    

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    • Contrassegnato come risposta Mancini, martedì 3 gennaio 2012 20:48
    martedì 3 gennaio 2012 09:58
    Moderatore

Tutte le risposte

  • Ciao, giusto per fare una prove ulteriore: se al posto di DB_ID() passi come parametro della DMV direttamente l'ID del database che ti interessa ti viene restituito sempre lo stesso errore o la query riesce?

    Grazie!


    Francesco Milano // .NET & SQL Server Consultant // blog // twitter
    martedì 3 gennaio 2012 09:38
  • l'errore restituito è questo

    ___ Messaggio 102, livello 15, stato 1, riga 2
    ___ Sintassi non corretta in prossimità di '('.

    Ciao,

    I Books Online riportano: "The built-in function DB_ID can be specified. When using DB_ID without specifying a database name, the compatibility level of the current database must be 90. "

    Quindi, verifica che il compatibility level del db non sia inferiore a 90 (SQL Server 2005).

    Questo è uno script che riproduce il problema:

    CREATE DATABASE foo;
    GO
    
    ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;
    GO
    
    USE foo;
    GO
    
    SELECT *
    FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL);
    
    /* Output:
    
    Msg 102, Level 15, State 1, Line 2
    Incorrect syntax near '('.
    
    */
    
    ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 100;
    GO
    
    SELECT *
    FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL);
    
    /* Output:
    
    database_id object_id...
    ----------- --------- 
    
    (0 row(s) affected)
    
    */
    
    USE master;
    
    DROP DATABASE foo;
    

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    • Contrassegnato come risposta Mancini, martedì 3 gennaio 2012 20:48
    martedì 3 gennaio 2012 09:58
    Moderatore
  • Grazie

     

    Questa sera lo provo sul   "Server delle prove" 

    poi ti faccio sapere

    martedì 3 gennaio 2012 11:58
  • Perfetto !!!

    Il problema era proprio il livello di compatibilita.

    Infatti quel DB era nato con MSDN

     

                       Grazie Lorenzo

    martedì 3 gennaio 2012 20:55