domingo, 13 de março de 2011

Estudando para prova 70-433 de SQL 2008

Pessoal,

segue link interessante para aqueles que estão estudando para a prova de entrada do SQL 2008.

http://estudandopara70433.wordpress.com/

abraços,

Péricles.

sábado, 12 de março de 2011

Google Maps - Geocode pelo Endereço

Olá,

existe uma forma de retornar a Latitude/Longitude de um determinado endereço, utilizando-se a API do Google Maps, a partir do SQL Server.

No mundo real, acredito que tal aplicação não estaria dentro do banco de dados, e sim em uma aplicação CLR, porém, para ilustrar o recurso disponível no SQL, resolvi demonstrá-lo aqui.

O objeto a ser utilizado é o MSXML2.ServerXMLHttp, praticamente da mesma forma que é feito em AJAX, e é acessado através das Procedures de Automação OLE do SQL Server, e para isto, você precisa habilitar o recurso.

Testei no SQL 2005 e 2008, não sei dizer se funciona no SQL 2000.

Abstract: using the SQL Server to return the coordinates of an address at Google Maps with OLE Automation Procedures (XMLHttp GET).

Segue o código:

-- Para habilitar o uso de OLE
-- Activate OLE
sp_configure 'show advanced options', 1
go
reconfigure
go
sp_configure 'Ole Automation Procedures', 1
go
reconfigure
go

-- Variaveis
-- Variables
DECLARE @Response VARCHAR(8000)
DECLARE @XML XML
DECLARE @Obj INT
DECLARE @Result INT
DECLARE @HTTPStatus INT
DECLARE @ErrorMsg VARCHAR(MAX)
DECLARE @URL VARCHAR(MAX)
DECLARE @GPSLatitude NUMERIC(20,6)
DECLARE @GPSLongitude NUMERIC(20,6)
DECLARE @Endereco VARCHAR(100)

-- Endereco para teste
-- Test address
SELECT @Endereco = 'Av. Paulista, 500, Sao Paulo, SP'
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=' + @Endereco

-- Criacao do objeto XMLHttp
-- Object XMLHttp creation
EXEC @Result = sp_OACreate 'MSXML2.ServerXMLHttp', @Obj OUT

-- Envio do comando GET
-- GET command
BEGIN TRY
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL,
'Content-Type', 'application/x-www-form-urlencoded'

EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml', @Response OUT
END TRY
BEGIN CATCH
-- Controle de Erro com bloco Try/Catch
-- Error Control
SELECT @ErrorMsg = ERROR_MESSAGE()
END CATCH

-- Destruicao do objeto
-- Object free
EXEC @Result = sp_OADestroy @Obj

-- Transformacao do resultado em XML
-- Convert result in XML Datatype
SELECT @XML = CAST(@Response AS XML)

-- Leitura dos valores desejados (latitude/longitude)
-- Gathering coordinates from XML
SELECT @GPSLatitude = @XML.value('(/GeocodeResponse/result/geometry/location/lat) [1]', 'numeric(10,6)')
SELECT @GPSLongitude = @XML.value('(/GeocodeResponse/result/geometry/location/lng) [1]', 'numeric(10,6)')

-- Exibicao dos resultados
-- Results
SELECT @GPSLatitude AS [Latitude], @GPSLongitude AS [Longitude], @XML AS [XML]
go

[]s

Péricles.

sexta-feira, 4 de março de 2011

Five Classic Videos Every DBA Should Watch

Brent Ozar made a series of interviews and presentations that we should watch carefully.

It's actually Four videos...

http://www.brentozar.com/archive/2011/03/five-videos-every-dba-should-watch/

Péricles.

quarta-feira, 2 de março de 2011

Check DB

Olá a todos !

Só pra lembrar, comando básico para fazer uma checagem no database...
De vez em quando é bom !

ALTER DATABASE Pubs SET SINGLE_USER
go
DBCC CHECKDB (Pubs, REPAIR_ALLOW_DATA_LOSS)
go
ALTER DATABASE Pubs SET MULTI_USER
go

Troque "Pubs" pelo nome do database em questão.

O database deve estar em SINGLE_USER MODE.

O parâmetro importante do CHECKDB tem 3 opções:
- REPAIR_ALLOW_DATA_LOSS: esta forma de reparo pode causar a perda de dados.
- REPAIR_FAST: mantido por questões de compatibilidade, não faz nada estrutural.
- REPAIR_REBUILD: corrige estruturas que não irão causar perda de dados.

Abraços.