none
Acessar sys.partitions de outra database RRS feed

  • Pergunta

  • Pessoal

    eu tenho várias databases em um banco de dados. gostaria de saber se há alguma forma de acessar as tabelas sys.partitions de todas essas bases.

    como exemplo do que preciso fazer: eu entro com windows authentication na base master e tenho mais duas bases, DB1 e DB2...

    gostaria de fazer uma consulta do tipo

    select DB1.dbo.sys.partitions

    e

    select DB1.dbo.sys.partitions

    alguém já fez isso?

    Anderson Rodrigues
    terça-feira, 24 de março de 2009 13:23

Respostas

  • Anderson,

    Não conheço alguma view ou algo do tipo que faça isso.

    Você pode pegar da seguinte forma:

     
     
     
    create database db1  
    GO  
    create database db2  
    GO  
     
    DECLARE @SQL VARCHAR(MAX)  
    DECLARE @SQL_FINAL VARCHAR(MAX) = '' 
    DECLARE @CAMPO VARCHAR(300)   
          SET @SQL = ' select * from ?.sys.partitions ' 
     
    DECLARE C_SQL CURSOR FOR 
        SELECT name from master.sys.databases   
        where 
            name not IN ('master''tempdb''model''msdb')  
                  
    OPEN C_SQL  
    FETCH NEXT FROM C_SQL INTO @CAMPO  
     
    WHILE @@FETCH_STATUS = 0   
    BEGIN 
            
          SET @SQL_FINAL = @SQL_FINAL + REPLACE( @SQL, '?', @CAMPO ) + ' UNION ALL ' + CHAR(10)   
            
          FETCH NEXT FROM C_SQL INTO @CAMPO  
     
    END 
     
    CLOSE C_SQL  
    DEALLOCATE C_SQL  
     
     
    PRINT @SQL_FINAL  
     
     
     

    Eu vi um select que Gustavo postou parrcido com esse daí só adaptei.

    Abraços
    Demétrio Silva
    terça-feira, 24 de março de 2009 15:13

Todas as Respostas

  • Anderson,

    Não conheço alguma view ou algo do tipo que faça isso.

    Você pode pegar da seguinte forma:

     
     
     
    create database db1  
    GO  
    create database db2  
    GO  
     
    DECLARE @SQL VARCHAR(MAX)  
    DECLARE @SQL_FINAL VARCHAR(MAX) = '' 
    DECLARE @CAMPO VARCHAR(300)   
          SET @SQL = ' select * from ?.sys.partitions ' 
     
    DECLARE C_SQL CURSOR FOR 
        SELECT name from master.sys.databases   
        where 
            name not IN ('master''tempdb''model''msdb')  
                  
    OPEN C_SQL  
    FETCH NEXT FROM C_SQL INTO @CAMPO  
     
    WHILE @@FETCH_STATUS = 0   
    BEGIN 
            
          SET @SQL_FINAL = @SQL_FINAL + REPLACE( @SQL, '?', @CAMPO ) + ' UNION ALL ' + CHAR(10)   
            
          FETCH NEXT FROM C_SQL INTO @CAMPO  
     
    END 
     
    CLOSE C_SQL  
    DEALLOCATE C_SQL  
     
     
    PRINT @SQL_FINAL  
     
     
     

    Eu vi um select que Gustavo postou parrcido com esse daí só adaptei.

    Abraços
    Demétrio Silva
    terça-feira, 24 de março de 2009 15:13
  • cara, valeu, eu estava tentando acessar da seguinte forma

    SELECT * FROM DB1.DBO.sys.partitions


    o correto, como vi no teu código acima seria

    SELECT * FROM DB1.sys.partitions


    agora eu consegui... valeu...

    Anderson Rodrigues
    terça-feira, 24 de março de 2009 16:40