sexta-feira, 25 de fevereiro de 2011

Verificando espaço em disco e o espaço ocupado por tabelas!

  
-- No exemplo temos um Banco sem o seu log no sql2008
-- arquivo ldf .. o comando abaixo recria o log e anexa o banco. 


use master 
go 
sp_attach_single_file_db 'NomeLogicoBanco', 'Caminho e nome do arquvo .mdf' 
go 

/*
Muito interessante, foi feito por Thiago Zavaschi
Verificar o tamanho ocupado por tabelas no banco (a.k.a achar maiores tabelas):
Ordenado por quantidade de linhas:
SELECT object_name(id), rowcnt, dpages * 8 AS [tamanho KB] FROM sysindexes
WHERE indid IN (1,0) AND objectproperty(id,'isusertable') = 1
ORDER BY rowcnt DESC
Ordenado por tamanho físico:
SELECT object_name(id), rowcnt, dpages * 8 AS [tamanho KB] FROM sysindexes
WHERE indid IN (1,0) AND objectproperty(id,'isusertable') = 1
ORDER BY [tamanho KB] DESC
E para mostrar o espaço em disco disponível (valor absoluto e percentual) e o espaço total dos discos, é possível utilizar (a fonte deste script é o SQLDBATips): */
DECLARE @hr int
DECLARE @fso int
DECLARE @drive char(1)
DECLARE @odrive int
DECLARE @TotalSize varchar(20)
DECLARE @MB bigint ; SET @MB = 1048576
CREATE TABLE #drives (drive char(1) PRIMARY KEY,
                      FreeSpace int NULL,
                      TotalSize int NULL)
INSERT #drives(drive,FreeSpace)
EXEC master.dbo.xp_fixeddrives
EXEC @hr=sp_OACreate 'Scripting.FileSystemObject',@fso OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso
DECLARE dcur CURSOR LOCAL FAST_FORWARD
FOR SELECT drive from #drives
ORDER by drive
OPEN dcur
FETCH NEXT FROM dcur INTO @drive
WHILE @@FETCH_STATUS=0
BEGIN
        EXEC @hr = sp_OAMethod @fso,'GetDrive', @odrive OUT, @drive
        IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso
        EXEC @hr = sp_OAGetProperty @odrive,'TotalSize', @TotalSize OUT
        IF @hr <> 0 EXEC sp_OAGetErrorInfo @odrive
        UPDATE #drives
        SET TotalSize=@TotalSize/@MB
        WHERE drive=@drive
        FETCH NEXT FROM dcur INTO @drive
END
CLOSE dcur
DEALLOCATE dcur
EXEC @hr=sp_OADestroy @fso
IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso
SELECT drive,
       FreeSpace as 'Livre(MB)',
       TotalSize as 'Total(MB)',
       CAST((FreeSpace/(TotalSize*1.0))*100.0 as int) as 'Livre(%)'
FROM #drives
ORDER BY drive
DROP TABLE #drives
RETURN
GO
/*
A saída do script deverá ser semelhante a:
drive Livre(MB)   Total(MB)   Livre(%)
----- ----------- ----------- -----------
C     9541        49999       19
D     46002       317966      14
F     37549       99998       37
K     68581       476269      14
É isso pessoal, fazia tempo que não postava algo masi focado a área de DBA (a qual gosto muito também), espero que seja útill.
*/



spatial data: uniões e intersecções

Achei muito interessante.. extraí do site http://sqlfromhell.wordpress.com

Dê uma lida



Algumas possibilidades interessantes dos Spatial Types é a combinação de polígonos, seja por união, intersecção ou exclusão.
A forma de união mais simples é a utilização do UNION ALL do próprio T-SQL, que possibilita combinar em uma mesma visualização (no SSMS) alguns pontos ou até milhares de polígonos.



DECLARE @P1 geometry
DECLARE @P2 geometry

SET @P1 = geometry::Point(10, 10, 0).STBuffer(5)
SET @P2 = geometry::Point(15, 10, 0).STBuffer(5)

SELECT @P1
UNION ALL
SELECT @P2


Em seguida, temos a união de dois polígonos pelo método STUnion:

1 - SELECT @P1.STUnion(@P2)

Identificando a intersecção de dois polígonos pelo método STIntersection:

1 - SELECT @P1.STIntersection(@P2)

O método STDifference combina dois polígonos removendo do primeiro polígono a área do segundo polígono:

1 - SELECT @P1.STDifference(@P2)


1 - SELECT @P2.STDifference(@P1)

E por fim, o método STSymDifference que combina dos polígonos removendo destes a área de intersecção:

1 - SELECT @P1.STSymDifference(@P2)

quarta-feira, 9 de fevereiro de 2011

SQLServer CTE


Achei muito interessante... e pode ser muito útil em algum momento
 para um de nos que trabalhamos com Tabelas temporária, tanto para
 virar dados(pivot).. trata-se do CTE (Common Table Expression) é um
 novo recurso fornecido pela Microsoft SQL Server 2005. No mundo real,
 que muitas vezes precisam de consulta de dados hierárquica do banco de
 dados. Por exemplo, para obter uma lista de lista hierárquica de todos
 os funcionários, a lista de categorias de produtos, etc CTE cumpre este
 requisito fazendo uma consulta recursiva.

Gostei muito desse exemplo, copie/cole e rode:
-------------------------------------------------------------------------- 
DECLARE @Mes INT ,@Ano INT
SELECT @Mes = 10 ,@Ano = 2010;

WITH CTE (Data) AS
(
SELECT DATEADD(year, @Ano - 1900, DATEADD(month, @Mes - 1, 0))
UNION ALL
SELECT Data+1
FROM CTE
WHERE MONTH(Data + 1) = @Mes
)

SELECT
[1] AS [Domingo]
, [2] AS [Segunda-Feira]
, [3] AS [Terça-Feira]
, [4] AS [Quarta-Feira]
, [5] AS [Quinta-Feira]
, [6] AS [Sexta-Feira]
, [7] AS [Sábado]
FROM (
SELECT DAY(Data) AS Dia, 
DATEPART(weekday, Data) DiaSemana, 
DATEPART(week, Data) Semana
FROM CTE
) AS Datas
PIVOT
(
MAX(Dia) FOR DiaSemana
IN ([1], [2], [3], [4], [5], [6], [7]) ) AS A
--select * from CTE

domingo, 6 de fevereiro de 2011

Calcular HASH de Arquivos TISS XML..

Calcula o HASH de um aquivo XML TISS, Troca o HASH dentro do arquivo e renomeia ele... AI Está o link .. CLIQUE AQUI

Comando SQL Pesquisa uma string em qualquer banco

/*
By Ulisses Ramos
Objetivo: Pesquisar uma string em qualquer banco sqlserver
Data criação: 20 de janeiro de 20111

  */

use SEUBANCO
GO
IF OBJECT_ID('tempdb.dbo.#TabelasSistema') IS NOT NULL
    DROP TABLE #TabelasSistema
GO
DECLARE @StrPesquisa varchar(50)

-- TROQUE AQUI PELA STRING QUE QUER PESQUISAR
set @StrPesquisa = '''%'+'Ulisses'+'%'''


SELECT  +'select '+CAST (row_number() over (order by  b.name  asc) AS VARCHAR(20))+
          ',* from '+ b.name +' where '+ a.name +' LIKE '+@StrPesquisa AS COMANDOSQL
Into #TabelasSistema
   
    FROM sys.columns a
    join sys.tables b
    on (a.object_id = b.object_id)
    where a.system_type_id in (
    select system_type_id from
    sys.types aa where aa.collation_name is not null)
    ORDER BY  b.name
       
    GO


Declare @SQL varchar(512)
While (Select Count(*) From #TabelasSistema) > 0
Begin
    Set @SQL      = (Select TOP 1 COMANDOSQL From #TabelasSistema)

    Exec (@SQL)
    Delete From #TabelasSistema Where COMANDOSQL= @SQL
   
End


GO
GO
IF OBJECT_ID('tempdb.dbo.#TabelasSistema') IS NOT NULL
    DROP TABLE #TabelasSistema
GO
DECLARE @StrPesquisa varchar(50)
set @StrPesquisa = '''%'+'rodrigo'+'%'''
SELECT  +'select '+CAST (row_number() over (order by  b.name  asc) AS VARCHAR(20))+
          ',* from '+ b.name +' where '+ a.name +' LIKE '+@StrPesquisa AS COMANDOSQL
Into #TabelasSistema
   
    FROM sys.columns a
    join sys.tables b
    on (a.object_id = b.object_id)
    where a.system_type_id in (
    select system_type_id from
    sys.types aa where aa.collation_name is not null)
    ORDER BY  b.name
       
GO