Upload
fabricio-catae
View
269
Download
5
Embed Size (px)
Citation preview
Novos Recursos Novos Recursos Transact-SQL no SQL Transact-SQL no SQL Server 2005Server 2005Ioannis XylarasIoannis XylarasRapid Response EngineerRapid Response EngineerMicrosoft CorporationMicrosoft Corporation
Fabricio CataeFabricio CataeRapid Response EngineerRapid Response EngineerMicrosoft CorportationMicrosoft Corportation
ObjetivoObjetivo
Esta apresentação proverá uma visão Esta apresentação proverá uma visão geral dos principais recursos da geral dos principais recursos da linguagem Microsoft linguagem Microsoft ® ® SQL ServerSQL Server™ ™ 2005 Transact-SQL, incluindo claros e 2005 Transact-SQL, incluindo claros e consistentes exemplos de cenários consistentes exemplos de cenários onde as funcionalidades poderão ser onde as funcionalidades poderão ser utilizadas.utilizadas.
AgendaAgendaNovos Data TypesNovos Data TypesDML com OutputDML com OutputTOP (%n)TOP (%n)Recursos DRIRecursos DRIParticionamento de Particionamento de TabelaTabelaException HandlingException HandlingCommon Table Common Table Expression andExpression andRecursive QueriesRecursive QueriesExcept e IntersectExcept e Intersect
Função RankingFunção RankingNovas Operações Novas Operações RelacionaisRelacionaisMelhorias do IndexMelhorias do IndexSnapshot Isolation Snapshot Isolation LevelLevelMudanças no Mudanças no comportamento de comportamento de recompilaçãorecompilaçãoXML showplanXML showplan
Novos Data TypesNovos Data Types
XMLXMLvarchar(max)varchar(max)nvarchar(max)nvarchar(max)varbinary(max)varbinary(max)
XML Data TypeXML Data TypePrimeira classe data type em T-SQLPrimeira classe data type em T-SQL
Colunas, Variáveis, ParametrosColunas, Variáveis, ParametrosOpcionalmente confinado por um Schema XMLOpcionalmente confinado por um Schema XML
XQuery(W3C Básico)+DMLXQuery(W3C Básico)+DMLHabilidade em referenciar colunas variáveis Habilidade em referenciar colunas variáveis em XQueryem XQuery
Indices XMLIndices XMLExemplo:Exemplo:
varchar(max)varchar(max)Modelo de programação unified para tipos de Modelo de programação unified para tipos de dados pequenos e grandesdados pequenos e grandes
ComparisonsComparisonsTriggersTriggersConcatenationConcatenationAggregatesAggregatesParametersParametersVariablesVariablesIndex Included columnsIndex Included columns
Facilita a transição quando os dados pequenos Facilita a transição quando os dados pequenos de string/binary passam o limite de 8kde string/binary passam o limite de 8kRecomendado alternativamente para TEXTORecomendado alternativamente para TEXTO
varchar(max)varchar(max)DetalhesDetalhes
Microsoft Microsoft ® ® SQL ServerSQL Server™ 2000™ 2000
varchar(max)varchar(max)DetalhesDetalhes
SQL Server 2005SQL Server 2005
varbinary(max) varbinary(max)
Extensão para varbinaryExtensão para varbinarymaior que 2GBmaior que 2GBUtiliza MAX size especificadoUtiliza MAX size especificado
Alternativa para IMAGEAlternativa para IMAGENão suporta texto pointerNão suporta texto pointer.WRITE (expression,@Offset,@Length).WRITE (expression,@Offset,@Length)
DML com cláusula OUTPUTDML com cláusula OUTPUTHaHabilidade de retornar linhas como parte de bilidade de retornar linhas como parte de operações DMLoperações DMLImagens “inseridas” e “eliminadas” disponíveis Imagens “inseridas” e “eliminadas” disponíveis pra capturar valores pre e pós atuliazaçãopra capturar valores pre e pós atuliazaçãoLinhas retornadas irão para dentro de tabelas / Linhas retornadas irão para dentro de tabelas / variáveisvariáveis
OUTPUT ... INTO ...OUTPUT ... INTO ...
OUTPUTOUTPUT Como utilizar o recurso OUTPUT Como utilizar o recurso OUTPUT
Declarar as variáveis da tabela avaliada1
DECLARE @InsertDetails TABLE(ProductID int, InsertedBy sysname)
Utilize OUTPUT para retornar detalhes para a variável2
DECLARE @InsertDetails TABLE(ProductModelID int, InsertedBy sysname)
INSERT INTO Production.ProductModel(Name, ModifiedDate)OUTPUT inserted.ProductModel ID, suser_name() INTO @InsertDetailsVALUES('Racing Bike', getdate())
SELECT * FROM @InsertDetails
Recurso TOP Recurso TOP Em Microsoft SQL Server 2000:Em Microsoft SQL Server 2000:
SELECT TOP <const.>SELECT TOP <const.>Em Microsoft SQL Server 2005:Em Microsoft SQL Server 2005:
SELECT TOPSELECT TOP (<expressão>) PERCENT (<expressão>) PERCENTTambém suportado em INSERT, Também suportado em INSERT, UPDATE, DELETEUPDATE, DELETE<expressão> deve ser variável, <expressão> deve ser variável, subquery(retorna escala numerica), ou subquery(retorna escala numerica), ou uma constanteuma constantePERCENT somente para SELECTPERCENT somente para SELECT
Mudanças DRI Mudanças DRI Suporte para novas ações SET Suporte para novas ações SET DEFAULT e SET NULL Declarative DEFAULT e SET NULL Declarative Referential Integrity (DRI)Referential Integrity (DRI)
ParticionamentoParticionamentoO que é Tabela Particionada ? O que é Tabela Particionada ?
Dados da tabela distribuídos através de Dados da tabela distribuídos através de múltiplos file groupsmúltiplos file groups
Melhora a performance em sistemas Melhora a performance em sistemas multiprocessados / multidrivemultiprocessados / multidriveFácil Gerenciamento de tabelas grandesFácil Gerenciamento de tabelas grandes
ParticionamentoParticionamentoComo particionar a tabela ? Como particionar a tabela ?
Criando uma partition function1CREATE PARTITION FUNCTION emailPF (nvarchar(30))AS RANGE RIGHT FOR VALUES ('G', 'N')
Criando um partition scheme2CREATE PARTITION SCHEME emailPSAS PARTITION emailPF TO (fg1, fg2, fg3)
Criando uma tabela particionada3CREATE TABLE Sales.CustomerEmail (CustID int, email nvarchar(30))ON EMailPS (email)
ParticionamentoParticionamentoBenefíciosBenefícios
AdministraçãoAdministraçãoEliminação e Recuperação Rápida de DadosEliminação e Recuperação Rápida de DadosBackup / Recuperação parcial dos dados históricosBackup / Recuperação parcial dos dados históricosAdministração inteligente do gerenciamento de índicesAdministração inteligente do gerenciamento de índicesMinimiza fragmentação de índices para tabelas Minimiza fragmentação de índices para tabelas historicamente particionadashistoricamente particionadasSuporte alternativo para armazenamento de histórico dos Suporte alternativo para armazenamento de histórico dos dadosdados
Desempenho de queries com tabelas grandesDesempenho de queries com tabelas grandesEficiente JoinEficiente JoinPequena arvore de indice ou scaneamento de tabela (table Pequena arvore de indice ou scaneamento de tabela (table scan) quando usadas queries com partições simplesscan) quando usadas queries com partições simplesPlanos de queries simples comparadas com Partition ViewsPlanos de queries simples comparadas com Partition Views
Exception Handiling Exception Handiling
Captura todas as exceções do SQL ServerCaptura todas as exceções do SQL ServerCaptura qualquer erro com o ajuste do @@errorCaptura qualquer erro com o ajuste do @@errorPrevine terminação de uma batchPrevine terminação de uma batch
Modelo TRY / CATCHModelo TRY / CATCHO fluxo de controle desloca para CATCH erros O fluxo de controle desloca para CATCH erros fatais de uma transaçãofatais de uma transação
Nenhuma perda do contexto da transaçãoNenhuma perda do contexto da transaçãoRegistra o estado quando os erros fatais à Registra o estado quando os erros fatais à transação ocorremtransação ocorrem
Exception Handiling Exception Handiling
Syntax:Syntax:
As construções de TRY/CATCH podem ser As construções de TRY/CATCH podem ser alinhadasalinhadasAs exceções são capturadas pelo bloco do As exceções são capturadas pelo bloco do CATCH associadas com a construção mais CATCH associadas com a construção mais próxima de TRY/CATCHpróxima de TRY/CATCH
Exception Handiling Exception Handiling
Detalhes dos erros estão disponíveis a Detalhes dos erros estão disponíveis a qualquer momento dentro do bloco qualquer momento dentro do bloco CATCHCATCH
Error_number()Error_number()Error_message()Error_message()Error_severity()Error_severity()Error_state()Error_state()Error_procedure()Error_procedure()Error_line()Error_line()
O que são O que são Common Table Common Table Expressions?Expressions?
O resultado pode ser usado em SELECT, INSERT, O resultado pode ser usado em SELECT, INSERT, UPDATE ou DELETEUPDATE ou DELETE..
Vantagens de expressões comuns da tabela:Vantagens de expressões comuns da tabela:Queries com tabelas derivadas tornam-se mais legiveisQueries com tabelas derivadas tornam-se mais legiveisFornece movimentações para hierarquias recursivasFornece movimentações para hierarquias recursivas
WITH TopSales (SalesPersonID, NumSales) AS( SELECT SalesPersonID, Count(*) FROM Sales.SalesOrderHeader GROUP BY SalesPersonId )SELECT * FROM TopSales WHERE SalesPersonID IS NOT NULLORDER BY NumSales DESC
Um resultado provisório nomeado para ajustar-se baseado em uma query SELECT
Common Table Expression
Como usar uma Como usar uma Common Common Table ExpressionTable Expression
Escolha um nome CTE e uma lista de coluna1
WITH TopSales (SalesPersonID, NumSales) ASWITH TopSales (SalesPersonID, NumSales) AS(SELECT SalesPersonID, Count(*) FROM Sales.SalesOrderHeader GROUP BY SalesPersonId)
Cria um CTE SELECT query2
Utilize um CTE em uma query3
WITH TopSales (SalesPersonID, NumSales) AS(SELECT SalesPersonID, Count(*) FROM Sales.SalesOrderHeader GROUP BY SalesPersonId)
SELECT LoginID, NumSalesFROM HumanResources.Employee e INNER JOIN TopSales ON TopSales.SalesPersonID = e.EmployeeIDORDER BY NumSales DESC
Como executar Queries Recursivas Como executar Queries Recursivas com Common Table Expressionscom Common Table Expressions
Crie uma query membro inicial (topo da arvore recursiva)1
SELECT ManagerID, EmployeeID FROM HumanResources.EmployeeWHERE ManagerID IS NULL
Adicione um operador UNION ALL2
SELECT ManagerID, EmployeeID FROM HumanResources.EmployeeWHERE ManagerID IS NULL
UNION ALL
Crie um query membro recursiva que faça uma auto-referencia ao CTE
3
SELECT ManagerID, EmployeeID FROM HumanResources.EmployeeWHERE ManagerID IS NULL
UNION ALL
SELECT e.ManagerID, e.EmployeeIDFROM HumanResources.Employee e INNER JOIN HumanResources.Employee mgrON e.ManagerID = mgr.EmployeeID
Except e IntersectExcept e IntersectAjuste dos operadores que produzem um resultado baseando Ajuste dos operadores que produzem um resultado baseando no ajuste de duas outras linhasno ajuste de duas outras linhasEXCEPT retorna o ajuste consistente de todas as linhas que são EXCEPT retorna o ajuste consistente de todas as linhas que são parte do primeiro resultado e não do segundoparte do primeiro resultado e não do segundoINTERSEC retorna o ajude de linhas que são parte dos dois.INTERSEC retorna o ajude de linhas que são parte dos dois.
SELECT OrdemdeVendaID, ClienteID, VendedorID FROM Vendas.CabecalhoOrdemVendaEXCEPTSELECT OrdemdeVendaID, ClienteID, VendedorID FROMOrdemImportada
SELECT OrdemdeVendaID, ClienteID, VendedorID FROM Vendas.CabecalhoOrdemVendaINTERSECTSELECT OrdemdeVendaID, ClienteID, VendedorID FROMOrdemImportada
O que são Ranking Functions?O que são Ranking Functions? FunçãoFunção DescriçãoDescrição
RANKRANKRetorna um rank para cada linha dentro de Retorna um rank para cada linha dentro de uma partição específica no ajuste do uma partição específica no ajuste do resultadoresultado
DENSE_RANKDENSE_RANKRetorna um rank consecutivo para cada Retorna um rank consecutivo para cada linha dentro de uma partição específica no linha dentro de uma partição específica no ajuste do resultadoajuste do resultado
ROW_NUMBERROW_NUMBERRetorna a posição de linha ordinal para Retorna a posição de linha ordinal para cada linha dentro de um grupo no ajuste cada linha dentro de um grupo no ajuste do resultadodo resultado
NTILENTILEDivide as linhas em cada divisória de um Divide as linhas em cada divisória de um ajuste de resultado em um número ajuste de resultado em um número especificado de ranks baseados em um especificado de ranks baseados em um valor dado.valor dado.
Ranking FunctionRanking FunctionDetalhesDetalhes
Ranking FunctionRanking FunctionResultadoResultado
Novos Operadores RelacionaisNovos Operadores Relacionais
PIVOTPIVOTTransforma o ajuste de linhas para Transforma o ajuste de linhas para colunascolunasSimilar ao acesso TRANSFORMSimilar ao acesso TRANSFORMUtil para abrir schemas / cenários Online Util para abrir schemas / cenários Online Analytical Processing (OLAP)Analytical Processing (OLAP)
UNPIVOTUNPIVOTOperação reversa do PIVOTOperação reversa do PIVOT
APPLYAPPLYPerminte avaliar uma função table-value Perminte avaliar uma função table-value pra cada linha de outer-tablepra cada linha de outer-table
PivotPivotO que são as operações Pivot e Unpivot ? O que são as operações Pivot e Unpivot ?
CustCust BikeBike ChainChain
MikeMike 88 22
LisaLisa 33 77
PIVOT – converte valores para colunasPIVOT – converte valores para colunas
CustCust ProdProd QtyQty
MikeMike BikeBike 88
MikeMike ChainChain 22
LisaLisa BikeBike 33
LisaLisa ChainChain 77
SELECT * FROM Sales.Order PIVOT (SUM(Qty) FOR Prod IN ([Bike],[Chain])) PVT
SELECT Cust, Prod, QtyFROM Sales.PivotedOrder UNPIVOT (Qty FOR Prod IN ([Bike],[Chain])) UnPVT
CustCust BikeBike ChainChain
MikeMike 88 22
LisaLisa 33 77
CustCust ProdProd QtyQty
MikeMike BikeBike 33
MikeMike ChainChain 22
MikeMike BikeBike 55
LisaLisa BikeBike 33
LisaLisa ChainChain 33
LisaLisa ChainChain 44
UNPIVOT – converte colunas para valoresUNPIVOT – converte colunas para valores
O que é o operador Apply ?O que é o operador Apply ?Invoca uma função table-valued Invoca uma função table-valued
uma vez por linhauma vez por linhaCROSS APPLY – somente linhas com CROSS APPLY – somente linhas com
resultados combinados da função.resultados combinados da função.OUTER APPLY – todas as linhas, não OUTER APPLY – todas as linhas, não
importanto os resultados combinados da função.importanto os resultados combinados da função.
CREATE FUNCTION Sales.MostRecentOrders(@CustID AS int) RETURNS TABLE ASRETURN SELECT TOP(3) SalesOrderID, OrderDate FROM Sales.SalesOrderHeader WHERE CustomerID = @CustID ORDER BY OrderDate DESC
CustIDCustID NameName11 A Bike StoreA Bike Store22 Progressive SportsProgressive Sports
SalesOrderIDSalesOrderID OrderDateOrderDate101101 11/200311/2003205205 12/200312/2003356356 01/200401/2004
CustomerCustomer SalesSalesOrderIDOrderID
OrderDateOrderDate
A Bike StoreA Bike Store 101101 11/200311/2003A Bike StoreA Bike Store 205205 12/200312/2003A Bike StoreA Bike Store 356356 01/200401/2004
SELECT Name AS Customer, MR.*FROM Sales.Store CROSS APPLY Sales.MostRecentOrders(CustomerID) AS MR
IndicesIndicesMudançasMudanças
ALTER INDEXALTER INDEXModifica uma tabela ou view index (relacional ou XML) Modifica uma tabela ou view index (relacional ou XML) desabilitando, reconstruindo ou reorganizando o índice; ou desabilitando, reconstruindo ou reorganizando o índice; ou por ajustar opções no índicepor ajustar opções no índice
Opções de ÍndicesOpções de ÍndicesDISABLEDISABLEALLOW_ROW_LOCKSALLOW_ROW_LOCKSALLOW_PAGE_LOCKSALLOW_PAGE_LOCKSMAXDOPMAXDOPONLINEONLINE
INDICE com colunas incluídasINDICE com colunas incluídasInclui colunas não-chave em índices não clusterizadosInclui colunas não-chave em índices não clusterizadoscontorna os limites atuais do índice no tamanho total de contorna os limites atuais do índice no tamanho total de uma chave do índice e do número de colunas máximasuma chave do índice e do número de colunas máximas
IndicesIndicesOperações OnlineOperações Online
Manutenção online dos indicesManutenção online dos indicesCriaçãoCriaçãoReconstruçãoReconstruçãoReorganização (incluindo BLOBs)Reorganização (incluindo BLOBs)ExcluindoExcluindoIncluindo ou excluindo confinamente (chave Incluindo ou excluindo confinamente (chave primária, única)primária, única)
Totalmente paralelaTotalmente paralelaOnline / Offline são suportados ambosOnline / Offline são suportados ambosOs updates funcionam um pouco mais lentos Os updates funcionam um pouco mais lentos durante uma operação online do índicedurante uma operação online do índice
IndicesIndicesCaracterísticas do Novo Indice Características do Novo Indice
O recurso ALTER INDEX permite:O recurso ALTER INDEX permite:DesabilitarDesabilitar
ReconstruirReconstruir
ReorganizarReorganizar
Configurar as opçõesConfigurar as opções
ALTER INDEX PK_Customer_CustomerID ON Sales.Customer REBUILD
ALTER INDEX IX_Customer_TerritoryID ON Sales.Customer DISABLE
ALTER INDEX PK_Customer_CustomerID ON Sales.Customer REORGANIZE
ALTER INDEX PK_Customer_CustomerId ON Sales.Customer SET(...)
Snapshot Isolation Snapshot Isolation
Transaction isolation levelsTransaction isolation levelsRead UncommittedRead UncommittedRead CommitedRead CommitedRepeatable ReadRepeatable ReadSerializableSerializableSnapshotSnapshot
Snapshot Isolation Snapshot Isolation Disponibilidade de dados aumentada para Disponibilidade de dados aumentada para aplicações lidasaplicações lidas
Permite consistente leitura non-blocking dentro Permite consistente leitura non-blocking dentro um ambiente de OLTPum ambiente de OLTP
Permite escritas, que podem causar conflitosPermite escritas, que podem causar conflitosMAS ... MAS ... inclui a deteção imperativa do conflitoinclui a deteção imperativa do conflito
Usado melhor em Leitura - na maior parte a Usado melhor em Leitura - na maior parte a base de dados com relativamente poucas base de dados com relativamente poucas escritasescritasFácil migração de outras bases de dadosFácil migração de outras bases de dados
Mudanças no comportamento Mudanças no comportamento do Recompiledo Recompile
SQL Server 2000SQL Server 2000Compilação e recompilação Módulo-levelCompilação e recompilação Módulo-levelMódulo: sp, triggers, functions, batch, etc.Módulo: sp, triggers, functions, batch, etc.
SQL Server 2005SQL Server 2005Compilação Batch-level mas recompilação Compilação Batch-level mas recompilação em statement-levelem statement-levelRecompilação deve ser provocada por Recompilação deve ser provocada por várias condições: Exemplo:mudança de várias condições: Exemplo:mudança de estatísticas, mudança de opções SET, etc.estatísticas, mudança de opções SET, etc.
Custo menor de recompilaçãoCusto menor de recompilação
Mudanças no comportamento Mudanças no comportamento do Recompiledo Recompile
Aplicável para todos os motivos de Aplicável para todos os motivos de recompilação.recompilação.Cenários que mais se beneficiam:Cenários que mais se beneficiam:
Recompilação causada por mudanças de Recompilação causada por mudanças de estatisticasestatisticasBatch é grande e somente pequena Batch é grande e somente pequena porção necessita de recompilação porção necessita de recompilação (statement simples em um caso de (statement simples em um caso de mudanção de estatísticas)mudanção de estatísticas)Nova tabela é criada dentro da batchNova tabela é criada dentro da batch
XML ShowplanXML ShowplanInformação de perfil da saída showplan/stats Informação de perfil da saída showplan/stats no formato de XMLno formato de XMLUso XML schema documentado e revisado Uso XML schema documentado e revisado com mais informações do que SQL 2000 no com mais informações do que SQL 2000 no formato texto ou gráficoformato texto ou gráficoEntrega para cliente como ajuste de Entrega para cliente como ajuste de resultado single-valueresultado single-valuePode ser processado de várias maneirasPode ser processado de várias maneiras
Usando tecnologias XML: XQuery(de dentro do Usando tecnologias XML: XQuery(de dentro do SQL Server), XSLT, XPath, SAX, DOM, ...SQL Server), XSLT, XPath, SAX, DOM, ...Programaticamente: Microsoft Visual C#, Programaticamente: Microsoft Visual C#, Microsoft Visual C++, Java, ...Microsoft Visual C++, Java, ...Visível usando qualquer ferramenta XMLVisível usando qualquer ferramenta XML
DocumentaçãoDocumentaçãoAlguns Títulos de Livros MS PressAlguns Títulos de Livros MS Press
Para Maiores InformaçõesPara Maiores Informações
Mais sobre Visual Studio 2005 http://lab.msdn.microsoft.com/vs2005
Mais sobre SQL Server 2005 http://msdn.microsoft.com/SQL/2005/default.aspx
XML Develop Centerhttp://msdn.microsoft.com/xml/default.aspx
Site SQL Skillshttp://www.sqlskills.com Microsoft SQL Server Homehttp://www.microsoft.com/sql/default1.mspx
Recursos ComunitáriosRecursos ComunitáriosSite da Comunidade SQL ServerSite da Comunidade SQL Serverhttp://www.microsoft.com/http://www.microsoft.com/sql/community/default.mspxsql/community/default.mspx
Lista de newsgroupsLista de newsgroupshttp://www.microsoft.com/http://www.microsoft.com/sql/community/newsgroups/default.mspxsql/community/newsgroups/default.mspx
Localizar Grupo de Usuários LocaisLocalizar Grupo de Usuários Locaishttphttp://www.microsoft.com/communities/://www.microsoft.com/communities/
usergroups/default.mspxusergroups/default.mspx
Atender a chat ou web cast gratuitosAtender a chat ou web cast gratuitoshttp://www.microsoft.com/communities/chats/http://www.microsoft.com/communities/chats/default.mspxdefault.mspx http://www.microsoft.com/http://www.microsoft.com/usa/webcasts/default.aspusa/webcasts/default.asp
Sua Avaliação é Sua Avaliação é Importante!Importante!Por Favor, Não Esqueça de Por Favor, Não Esqueça de Preencher a Ficha de Avaliação Preencher a Ficha de Avaliação para esta sessãopara esta sessão
© 2005 Microsoft Corporation. Todos os direitos reservados.O propósito desta apresentação é apenas informativa. Microsoft não faz nenhuma garantia expressa ou implícita nesta apresentação.
Seu potencial. Nossa inspiração.MR