Microsoft SQL Server 2016 SP1 – Atualização Cumulativa 9


A Microsoft disponibilizou para download nesta semana a Atualização Cumulativa 6 para SQL Server 2016 SP1.

Atualização Cumulativa 6 para SQL Server 2016 SP1

O artigo KB4037354 com informações sobre o que a atualização traz de novo ainda não está disponível, publicado aqui pela Microsoft.

A tabela a seguir lista o status de artigos individuais da Base de conhecimento Microsoft. 

Número de bug do VSTS Número de artigo do KB Descrição Corrigir a área
10918636 4049027 CORREÇÃO: Erro de “AdomdConnectionException” quando a fonte de dados do SSRS 2016 usa msmdpump O Reporting Services
10868757 4040512 CORREÇÃO: Erro ao exportar um relatório do Reporting Services para PDF no SQL Server 2017 O Reporting Services
10868767 4039510 CORREÇÃO: Violação de acesso ocorre quando você usar sp_xml_preparedocument para abrir documentos XML no SQL Server 2014 ou 2017 XML
10067707 4019840 CORREÇÃO: Consultas em tabelas externas PolyBase retornam linhas duplicadas no SQL Server de 2016 e 2017 Mecanismo do SQL
10362525 4035062 CORREÇÃO: Uso de memória com muitos bancos de dados maiores no SQL Server 2016 que versões anteriores Mecanismo do SQL
11078704 4039592 CORREÇÃO: Não pode alterar a senha para um SQL Server 2014 ou 2016 conta de serviço quando é habilitada para proteção adicional da LSA Ferramentas de gerenciamento
11078711 4042232 CORREÇÃO: Violação de acesso quando você cancelar uma consulta pendente se os desaparecidos indexa o recurso está habilitada no SQL Server de 2014 e 2016 Desempenho de SQL
11078718 4043947 CORREÇÃO: Funcionalidade de favoritos não funciona completamente quando você abre um relatório em formato MHTML através do Outlook no SSRS 2014 e 2016 O Reporting Services
10868753 4033789 FIX: Um vazamento de memória pode ocorrer quando você executar operações de atualização de processo no SSAS Serviços de análise
10868722 4038882 FIX: SQL Server Backup gerenciado não exclui os backups antigos que estão para além do período de retenção no SQL Server Mecanismo do SQL
10868738 4039509 CORREÇÃO: SSAS falha quando você processa um cubo no SQL Server ou um banco de dados do SSAS Serviços de análise
10868725 4039511 CORREÇÃO: Conseguiu falhar Backup intermitentemente por causa de erro SQLVDI no SQL Server Mecanismo do SQL
10868770 4039735 CORREÇÃO: “Non-produzindo Scheduler” condição ocorre para consulta com muitas expressões em SQL Server 2014 e 2016 Desempenho de SQL
10868732 4040376 CORREÇÃO: Backup gerenciado no Microsoft Azure para depois de backup de banco de dados grande no SQL Server Mecanismo do SQL
11052450 4046056 CORREÇÃO: Afirmação ocorre sobre como acessar a tabela de memória otimizada através de Marte Mecanismo do SQL
10864945 3010148 CORREÇÃO: Papel Non-admin não pode receber correto ChildCount estimativas para membros da folha dimensão pai/filho no SSAS Serviços de análise
10965956 4034789 CORREÇÃO: Um erro de exceção inesperada ocorre quando uma medida de XTIR processa muitos registros no SSAS 2016 ou 2017 Serviços de análise
10870250 4040934 CORREÇÃO: Pacotes de serviço do SQL Server Integration pendurar aleatoriamente se log personalizado está habilitado Serviços de integração
11029968 4051356 CORREÇÃO: Restauração de banco de dados na memória falha com erros no SQL server 2016 Na memória OLTP
11031436 4052133 CORREÇÃO: Violação de acesso ocorre quando SQL Server 2016 tenta iniciar o Gerenciador de loja de consulta durante a inicialização Mecanismo do SQL
10980994 4052132 FIX: Um problema de Agendador não produzindo ocorre quando você usar o recurso de armazenamento de consulta do SQL Server no SQL Server Mecanismo do SQL
11124144 4052127 Hotfix: Mecanismo de alerta lê todo Log de eventos do aplicativo e envia aler Ferramentas de gerenciamento
10855950 4052125 CORREÇÃO: Log de auditoria para eventos de ROLLBACK TRANSACTION não está disponível no SQL Server 2016 Segurança do SQL
11060168 4052123 CORREÇÃO: Deslizamento de validade para o cookie de autenticação não está funcionando e falha redirecionar para a página de logon no SSRS 2016 O Reporting Services
11031058 4052121 CORREÇÃO: Violação de acesso para consultas de DMV correr contra um grupo de disponibilidade distribuídas no SQL Server Alta disponibilidade
10971673 4052119 CORREÇÃO: Transações distribuídas em um banco de dados AG falhar depois de reiniciar no SQL Server 2016 Mecanismo do SQL
10881290 4052131 CORREÇÃO: Sys.dm_os_windows_info Detran retorna valores errados para 10 de Windows e Windows server 2016 Mecanismo do SQL
10864854 4052572 CORREÇÃO: 2016 SSAS trava intermitentemente quando você renomear o banco de dados multidimensional usando script Serviços de análise
11127649 4052625 CORREÇÃO: Consultas de recuperação de dados usando a busca de índice não-agrupado demoram muito no SQL Server Mecanismo do SQL
10820931 4048942 CORREÇÃO: “Parado IOCP Listener” e “não produzidas IOCP ouvinte” dumps de memória gerado pelo SQL Server 2016 reiniciar Mecanismo do SQL
10921921 4048943 CORREÇÃO: Violação de acesso na réplica primária da AlwaysOn AG em SQL Server 2016 Alta disponibilidade
11018232 4046858 CORREÇÃO: Consulta que usa o plano de execução de consulta paralela com operação “merge join” lenta na atualização cumulativa 3, 4 ou 5 para SQL Server 2016 Service Pack 1 Desempenho de SQL
10935673 4052633 CORREÇÃO: Consulta SELECT que usa hash de modo lote operador agregado que conta várias colunas anuláveis retorna incorreto resulta em SQL Server Desempenho de SQL
10330560 4053550 CORREÇÃO: Processamento mensagem XML usando o Service Broker resulta em sessão pendurada no SQL Server 2016 Mecanismo do SQL
10678621 4037454 CORREÇÃO: Política de gerenciamento de diretiva não está funcionando depois de instalar o CU2 para SQL Server SP1 de 2016 Ferramentas de gerenciamento
10972567 4043624 CORREÇÃO: Limpeza manual de controle de alterações falhar com o erro de não-existência de tabela no SQL Server Mecanismo do SQL
10868776 3208545 FIX: SQL Server 2016 ou 2017 Analysis Services pode falhar em uma situação específica Serviços de análise
10868735 4022483 CORREÇÃO: Erro quando você exporta uma base de conhecimento DQS que contém domínios no cliente DQS no SQL Server Serviços de qualidade de dados (DQS)
10868748 4040401 CORREÇÃO: Violação de acesso para consulta a tipos de dados espaciais através de servidor vinculado no SQL Server Mecanismo do SQL
10930335 4044064 CORREÇÃO: Erro de “Solicitação expirou” quando você alterar as opções de segurança para um grupo de segurança MDS no SQL Server 2016 Serviços de qualidade de dados (DQS)
10934352 4045795 CORREÇÃO: Thread pool exaustão e contenção CMEMTHREAD na AAG com dados semeadura em SQL Server 2016 Mecanismo do SQL

A Atualização Cumulativa 6 para SQL Server 2016 SP1 está disponível para download aqui.

Fontes e Direitos Autorais: Microsoft Support – 21/11/2017 –https://support.microsoft.com/en-us/help/4037354/cumulative-update-6-for-sql-server-2016-sp1

Anúncios

Microsoft SQL Server 2016 – Atualização Cumulative 9


A Microsoft disponibilizou para download nesta semana a Atualização Cumulativa 9 para SQL Server 2016.

Atualização Cumulativa 9 para SQL Server 2016

De acordo com o artigo KB4037357 publicado pela Microsoft em seu site de suporte, esta atualização contém correções para os problemas que foram encontrados depois do lançamento do SQL Server 2016 e antes do lançamento do SQL Server 2016 SP1.

Entre os bugs corrigidos pela atualização estão um que causa um erro ao exportar um relatório do Reporting Services em PDF, um que faz com que uma violação de acesos ocorra quando você usar sp_xml_preparedocument para abrir documentos XML no SQL Server e um que causa o vazamento de memória quando você executa operações de atualização de processo no SSAS.

A tabela a seguir lista o status de artigos individuais da Base de conhecimento Microsoft.

Número de bug do VSTS Número de artigo do KB Descrição Corrigir a área
10868755 4040512 CORREÇÃO: Erro ao exportar um relatório do Reporting Services para PDF no SQL Server 2016 ou 2017 O Reporting Services
10868765 4039510 CORREÇÃO: Violação de acesso ocorre quando você usar sp_xml_preparedocument para abrir documentos XML no SQL Server XML
11078703 4039592 CORREÇÃO: Não pode alterar a senha para um SQL Server 2014 ou 2016 conta de serviço quando é habilitada para proteção adicional da LSA Ferramentas de gerenciamento
11078710 4042232 CORREÇÃO: Violação de acesso quando você cancelar uma consulta pendente se os desaparecidos indexa o recurso está habilitada no SQL Server de 2014 e 2016 Desempenho de SQL
11078717 4043947 CORREÇÃO: Funcionalidade de favoritos não funciona completamente quando você abre um relatório em formato MHTML através do Outlook no SSRS 2014 e 2016 O Reporting Services
10868752 4033789 FIX: Um vazamento de memória pode ocorrer quando você executar operações de atualização de processo no SSAS Serviços de análise
11077635 4035062 CORREÇÃO: Uso de memória com muitos bancos de dados maiores no SQL Server 2016 que versões anteriores Mecanismo do SQL
10868720 4038882 FIX: SQL Server Backup gerenciado não exclui os backups antigos que estão para além do período de retenção no SQL Server Mecanismo do SQL
10868737 4039509 CORREÇÃO: SSAS falha quando você processa um cubo no SQL Server ou um banco de dados do SSAS Serviços de análise
10868724 4039511 CORREÇÃO: Conseguiu falhar Backup intermitentemente por causa de erro SQLVDI no SQL Server Mecanismo do SQL
10868769 4039735 CORREÇÃO: “Non-produzindo Scheduler” condição ocorre para consulta com muitas expressões em SQL Server 2014 e 2016 Desempenho de SQL
11078700 4040108 CORREÇÃO: O Backup do banco de dados de disponibilidade através de aplicativo baseado em VSS pode falhar no SQL Server Mecanismo do SQL
10868731 4040376 CORREÇÃO: Backup gerenciado no Microsoft Azure para depois de backup de banco de dados grande no SQL Server Mecanismo do SQL
11061122 4046056 CORREÇÃO: Afirmação ocorre quando você acessar a tabela de memória otimizada através de Marte em 2016 de SQL Server Mecanismo do SQL
11057320 4052134 CORREÇÃO: Erros 33111 e 3013 quando você fazer backup de um TDE criptografada de dados no SQL Server Mecanismo do SQL
11124143 4052127 CORREÇÃO: O mecanismo de alerta lê o log de eventos do aplicativo completo e envia alertas sobre eventos antigos depois Windows é atualizado Ferramentas de gerenciamento
10881287 4052131 CORREÇÃO: Sys.dm_os_windows_info Detran retorna valores errados para 10 de Windows e Windows Server 2016 Mecanismo do SQL
11127656 4052625 CORREÇÃO: Consultas que recuperam dados por meio de busca de índice não-agrupado demorar mais no SQL Server Mecanismo do SQL
10870632 4042948 CORREÇÃO: Assinatura controlada por dados falha após você atualizar do SSRS 2008 a 2016 SSRS O Reporting Services
10868734 4022483 CORREÇÃO: Erro quando você exporta uma base de conhecimento DQS que contém domínios no cliente DQS no SQL Server Serviços de qualidade de dados (DQS)
10868746 4040401 CORREÇÃO: Violação de acesso para consulta a tipos de dados espaciais através de servidor vinculado no SQL Server Serviço do SQL

A Atualização Cumulativa 9 para SQL Server 2016 está disponível para download aqui.

Fonte e Direitos Autorais: Microsoft Support – 21/11/2017 – https://support.microsoft.com/en-us/help/4037357/cumulative-update-9-for-sql-server-2016

Material de Apoio – Fevereiro 2017


Salve, salve, amigos…. Bom dia!

Estamos chegando com mais um post da sessão Material de Apoio, sendo esta a sessão mais antiga do meu blog que em 2017 completa 10 anos de existência.

Ao longo destes 10 anos muita coisa mudou não somente na minha vida, mas também no meu blog, dentre elas o número de visitante crescendo ao longo dos dias, meses e anos conseguindo no começo deste ano atinguir a impressionamente marca de 1 milhão de visitantes a contar desde o primeiro dia que o meu antigo blog publicado no extinto livespace foi publicado.

Muito obrigado a todos, só tenho a agradecer á você e estes milhares de visitantes que me ajudaram a atinguir esta marca e fazem parte desta história.

Obrigado, valeu e que venham os próximos 1, 2, 3 milhões de visitantes.

O post de hoje

Para aqueles que já acompanham o meu blog a um certo tempo, os posts dedicados a sessão Material de Apoio, possuem o objetivo de compartilhar o conhecimento de recursos, funcionalidades e procedimentos que podemos realizar no Microsoft SQL Server.

Hoje não será diferente, como diria naquele filme vou “compartilhagram” os meus scripts catalogados ao longo dos anos de trabalho como DBA e hoje principalmente como Professor de Banco de Dados.

Neste post você vai encontrar arquivos relacionados com os seguintes temas:

  • Advanced Query with Tunning;
  • Compactação de Backup;
  • Compactação de Tabelas e Índices;
  • Compressão de Dados;
  • Criptografia de Banco de Dados;
  • Criptografia de Banco de Dados com Master Key;
  • Linked Server para Excel;
  • Transparent Data Encription TDE;
  • XQuery With Data Method;
  • XQuery With Exist Method; e
  • XQuery With Query Method.

Material de Apoio

A seguir apresento a relação de scripts selecionados:

1 – Material de Apoio – Fevereiro – 2017 – advanced-querying-and-query-tuning-in-sql-server-2000-and-2005-sql

2 – Material de Apoio – Fevereiro – 2017 – compactacao-de-backup-sql

3 – Material de Apoio – Fevereiro – 2017 – compactacao-de-tables-e-index-sql

4 – Material de Apoio – Fevereiro – 2017 – exemplo-compressao-de-dados-sql

5 – Material de Apoio – Fevereiro – 2017 – criptografia-sql

6 – Material de Apoio – Fevereiro – 2017 – criptografia-master-key-sql

7 – Material de Apoio – Fevereiro – 2017 – linked-server-para-excel-sql

8 – Material de Apoio – Fevereiro – 2017 – xquery-data-method-sql

9 – Material de Apoio – Fevereiro – 2017 – xquery-exist-method-sql

10 – Material de Apoio – Fevereiro – 2017 – xquery-query-method-sql

Por questões de compatibilidade com a plataforma WordPress.com, todos os arquivos estão renomeados com a extensão .doc ao final do seu respectivo nome, sendo assim, após o download torna-se necessário remover esta extensão, mantendo somente a extensão padrão .sql.

Nota: Todos os arquivos aqui disponibilizados foram obtidos ou criados com autorização de seus autores, sendo estes, passíveis de direitos autorais.

Links

Caso você queira acessar os posts anteriores da sessão, não perca tempo utilize os links listados abaixo:

Agradecimento

Mais uma vez obrigado por sua visita, espero lhe encontrar muitas vezes no decorrer deste ano em meu blog.

Um forte abraço, vamos em frente.

Até mais.

Short Scripts – Março 2016


Olá comunidade, boa tarde amantes do SQL Server e Banco de dados!!!!

Após alguns meses fora do ar, mais uma sessão do meu blog esta retornando com muita força e disposição, estou me referindo a Short Scripts, sessão que durante os últimos anos tem conseguido alavancar a visitação do meu blog e principalmente ajudar a todos da comunidade na utilização de pequenos scripts dos mais variados possíveis assuntos relacionandos com o banco de dados mas principalmente ao Microsoft SQL Server.

Caso você não se lembre esta é uma sessão publicada a cada bimestre, onde durante o intervalo entre a publicação do post anterior e o novo post, vou adicionando novos arquivos “scripts” a minha biblioteca de scripts e posteriormente selecione aqueles que aparentemente podem ser considerados pequenos e de fácil uso e entendimento, mas que na verdade podem ajudar a resolver diversas situações ou até mesmo servir como recurso para implementação na busca da solução de grandes obstáculos que os profissionais de banco de dados e desenvolvimento possam estar se deparando.

Muitos dos scripts disponibilizados nesta sessão são resultado de pesquisas, posts publicados nos fóruns MSDN e também de respostas encontradas em outros websites dedicados ao SQL Server. Caso você não tenha acessado os últimos posts, não perca tempo, utilize os links publicados a seguir:

https://pedrogalvaojunior.wordpress.com/2015/12/14/short-script-dezembro-2015/

https://pedrogalvaojunior.wordpress.com/2015/10/21/short-scripts-outubro-2015/

https://pedrogalvaojunior.wordpress.com/2015/08/26/short-scripts-agosto-2015/

https://pedrogalvaojunior.wordpress.com/2015/06/03/short-script-junho-2015/

Na relação de short scripts disponibilizados neste post, destaco os seguintes assuntos, conceitos ou funcionalidades:

  • Comando Like;
  • Comando Try…Catch;
  • Comando Print;
  • Concatenação de colunas e linhas;
  • Conversão de dados;
  • Dados Hexadecimais;
  • Database Owner;
  • Diretiva Set Ansi_Defaults;
  • Função Hashbytes;
  • Operador Bitwise;
  • Session Settings;
  • SET Implicit_Transactions;
  • String; e
  • Tipos de dados XML.

A seguir, apresento a relação de short scripts:

— Short Script 1 – Brincando com concatenação de linhas e colunas —

Select 1.8 E,1.8E,1.Eight,3+8E8Eight,

3+8 E8E,‘Six’+‘Seven’ ‘Eight’,‘Six’+‘Seven’+‘Eight’,

8.8Eight,‘Six”Seven’ ‘Eight’

Go

 

— Short Script 2 – Utilizando operador Bitwise para análise lógica de dados —

USE tempdb;

GO

 

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME = ‘bitwise’)

DROP TABLE bitwise;

GO

CREATE TABLE bitwise

(

a_int_value int NOT NULL,

b_int_value int NOT NULL

);

GO

INSERT bitwise VALUES (250, 255);

GO

 

USE tempdb;

GO

SELECT a_int_value | b_int_value

FROM bitwise;

GO

 

Select convert(binary, a_int_value | b_int_value) from bitwise

Go

 

— Short Script 3 – Trabalhando com XML – Apresentando os mesmos dados de forma diferente —

create table #customers (

id int,

customer varchar(50)

)

insert into #customers values (1,‘John’)

insert into #customers values (2,‘Lyss’)

insert into #customers values (3,‘Jack’)

insert into #customers values (4,‘David’)

insert into #customers values (5,‘Anne’)

insert into #customers values (6,‘Victoria’)

a)

SELECT 1 AS tag,

NULL AS parent,

id AS [customers!1!id],

customer AS [customers!2!customer]

FROM #customers AS customersa

UNION ALL

SELECT 2 AS tag,

1 AS parent,

id AS [customers!1!id],

customer AS [customers!2!customer]

FROM #customers AS customersb

ORDER BY [customers!2!customer] DESC,parent

FOR XML EXPLICIT, ROOT (‘customers’)

 

B)

SELECT id AS [customers/@id],

customer AS [customers/customers/@customer]

FROM #customers AS customesra

ORDER BY customer DESC

FOR XML PATH(),ROOT(‘customers’)

 

C)

SELECT customersa.id AS [customers.id],

customersb.customer AS [customers.customer]

FROM #customers AS customersa

INNER JOIN #customers AS customersb ON customersb.id=customersa.id

ORDER BY customersa.customer DESC

FOR XML AUTO, ROOT(‘customers’)

 

D)

DECLARE @x AS XML

SET @x=(

SELECT id, customer

FROM #customers AS customersa

FOR XML RAW(‘customer’),ROOT(‘customers’),TYPE

)

SELECT @x.query(

for $e in customers/customer

order by $e/@customer descending

return <customers id=”{$e/@id}”>

<customers customer=”{$e/@customer}”>

</customers>

</customers>’)

FOR XML RAW(‘customers’)

Go

 

— Short Script 4 – Descobrindo e Alterando o Database Owner —

— Obtendo a lista de Database Owners —

Select d.database_id,

d.name,

suser_name(d.owner_sid) as ‘Owner’,

d.user_access_desc,

d.compatibility_level

from sys.databases as d

Go

— Obtendo informações de um banco específico —

Exec sp_helpdb ‘Master’

Go

— Alterando o Database Owner —

Exec sp_changedbowner ‘NomedoNovoOwner’

Go

— Obtendo informações de um banco específico após alteração —

Exec sp_helpdb ‘Master’

Go

 

 

— Short Script 5 – Concatenação de string diretamente no select —

create table xxx (i int identity, a varchar(3))

go

declare @txt varchar(255)

set @txt = ‘Question’

select @txt = isnull (a, ‘?’) from xxx order by i

insert xxx values (‘of’)

insert xxx values (‘the’)

insert xxx values (‘day’)

select @txt = @txt + ‘ ‘ + a from xxx order by i

select @txt

Go

 

— Short Script 6 – Utilizando comando Like na junção de tabelas —

create table #Table1 (Col1 varchar(10))

create table #Table2 (Col1 varchar(10))

Go

insert into #table1 values (‘1’)

insert into #table2 values (‘1’)

insert into #table2 values (‘_1’)

insert into #table2 values (‘%1’)

insert into #table2 values (‘[_]1’)

insert into #table2 values (‘[%]1’)

Go

 

select * from #table1 t1 inner join #table2 t2

on t1.Col1 like t2.Col1

Go

 

 

— Short Script 7 – Session Settings – Utilizando ANSI_Defaults forçando SQL Server trabalhar com SET IMPLICIT_TRANSACTIONS —

Create Table QOD_Customers

(CompanyName Varchar(20),

Region nvarchar(15) Null)

Go

Insert Into QOD_Customers Values (‘A’,‘teste’)

Go 30

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

Create PROCEDURE [dbo].[QOD_Test_1]

AS

SET ANSI_DEFAULTS ON

— Before rollback Select Statement

SELECT COUNT(CompanyName) AS ‘Before rollback’ FROM [dbo].[QOD_Customers] WHERE [dbo].[QOD_Customers].[Region] IS NULL

UPDATE Dbo.QOD_Customers SET Region = ‘XXX’ WHERE dbo.QOD_Customers.region IS NULL

— The after update Select Statement

SELECT COUNT(CompanyName) AS ‘After update’ FROM [dbo].[QOD_Customers] WHERE [dbo].[QOD_Customers].[Region] IS NULL

ROLLBACK TRANSACTION

SET ANSI_DEFAULTS OFF

— The after rollback Select Statement

SELECT COUNT(CompanyName) AS ‘After Rollback’ FROM [dbo].[QOD_Customers] WHERE [dbo].[QOD_Customers].[Region] IS NULL

GO

 

Exec [QOD_Test_1]

Go

 

— Short Script 8 – Utilizando Try..Catch + Transaction + Print para apresentar mensagem —

declare @i int, @j int

set @i = 1

create table #temp (id int)

while (@i<=5)

begin

begin try

begin transaction

if (@i = 3)

set @j = @i/0

insert into #temp values (@i)

commit transaction

end try

begin catch

rollback transaction

print ‘this is an exception’;

end catch

set @i = @i + 1

end

 

select * from #temp

Go

 

— Short Script 9 – Trabalhando com a função Hashbytes para conversão de dados string para hexadecimal —

Select HASHBYTES(‘MD2’,‘January 1, 2016’)

Select HASHBYTES(‘MD4’,‘January 1, 2016’)

Select HASHBYTES(‘MD5’,‘January 1, 2016’)

Select HASHBYTES(‘SHA’,‘January 1, 2016’)

Select HASHBYTES(‘SHA1’,‘January 1, 2016’)

Select HASHBYTES(‘SHA2_256’,‘January 1, 2016’)

Select HASHBYTES(‘SHA2_512’,‘January 1, 2016’)

Go

 

 


 

Como de costume fique a vontade para compartilhar este conteúdo com seus contatos e redes sociais, contribua também enviando dicas, sugestões, dúvidas, críticas, enfim participe e ajude a melhorar cada vez mais esta sessão.

Mais uma vez obrigado por sua visita, nos encontramos em breve em mais uma post da sessão Short Scripts.

Valeu!!!

Short Script – Junho – 2015


Bom dia, Comunidade! Hello Everybody!!!

Estamos começando mais um mês e como diz alguns dos cronistas esportivos durante suas transmissões “O tempo passa….”, realmente passa e temos que procurar aproveitar.

Como já destaquei anteriormente procure diariamente estudar e conhecer cada vez mais sobre o mundo de Banco de Dados, Carreira de DBA, SQL Server e outros elementos que se relacionam com a minha função de Administrador de Banco de Dados, que exerço a muito tempo. Na verdade faço isso por que gosto e principalmente para me manter atualizado neste concorrido mercado de trabalho, seja ele profissional ou acadêmico, neste sentido em muitos momentos algumas informações, dicas, truques e até mesmo códigos de exemplo acabam fazendo parte da minha “Biblioteca de Scripts” que venho nos últimos anos compartilhando com todos vocês.

Seguindo esta escrita e mantendo a tradição, como de costume todo inicio ou final de mês estou compartilhando com vocês novos Shorts Scripts ou Materiais de Apoio, e hoje não será diferente.

Neste Short Script, você vai encontrar pequenos blocos de código ou exemplos relacionados aos seguintes itens:

  • Criação de Jobs e Steps por linha de comando utilizando a opção @subsytem;
  • Criação de função para manipulação de String;
  • Criação de uma User Function Scalar para trabalhar com a Tabela Price;
  • Simulando um Select “*” que não retorna todas as colunas;
  • Trabalhando com XML em conjunto com SP_XML_PrepareDocument;
  • Utilizando a função Count_Big em conjunto com Funções de Agregação;
  • Utilizando o comando Intersect com valores Char e Int; e
  • Utilizando Sparse Columns e Sparse Columns Sets.

Fique a vontade para copiar e compartilhar os Short Scripts apresentados abaixo:

 

— Short Script 1 – Criando Job para substituir o uso do XP_CMDShell –

Create PROCEDURE dbo.usp_ExecCmdShellProcess

AS

BEGIN

DECLARE @job NVARCHAR(100), @BulkCMD Varchar(1000)

SET @job = ‘xp_cmdshell replacement’+Convert(Varchar(10),GetDate()) ;

 

SET @BulkCMD = ‘BULK INSERT ListFiles FROM ‘+”’C:\TEMP\LISTFILES.TXT” ‘+

‘WITH (FIELDTERMINATOR = ”;”, ROWTERMINATOR = ”’+ CHAR(10) +”’, CODEPAGE = ”ACP”)’

 

EXEC msdb..sp_add_job @job_name = @job,

@description = ‘Automated job to execute command shell script’,

@owner_login_name = ‘pedro’, @delete_level = 1 ;

 

EXEC msdb..sp_add_jobstep @job_name = @job, @step_id = 1,

@step_name = ‘Command Shell Execution’, @subsystem = ‘CMDEXEC’,

@command =’dir /b > C:\TEMP\LISTFILES.TXT’, @on_success_action = 1;

 

EXEC msdb..sp_add_jobserver @job_name = @job ;

 

EXEC msdb..sp_start_job @job_name = @job ;

 

Exec(@Bulkcmd)

 

END ;

GO

 

— Short Script 2 – Criando User Function para cortar Strings em partes —

CREATE FUNCTION fncCortaString(@txt VARCHAR(50), @txt_ini VARCHAR(50), @txt_fim VARCHAR(50))

RETURNS VARCHAR(50)

BEGIN

RETURN

(

SUBSTRING(@txt, CHARINDEX(@txt_ini, @txt) + LEN(@txt_ini), (CHARINDEX(@txt_fim, @txt) – CHARINDEX(@txt_ini, @txt)) – LEN(@txt_ini))

)

END

 

Select dbo.fncCortaString(‘SQL Server’, ‘SQL ‘, ‘ver’)

 

— Short Script 3 – Utilizando a função Count_Big para criar índice único em view com função de agregação —

Create Table MySampleTable

(Id1 Int,

Id2 Int,

SomeData Varchar(100))

 

Create View SampleView

With SchemaBinding

As

Select COUNT(*) TableCount,

Id2

From dbo.MySampleTable

Group By Id2

 

— Erro ao criar —

Create Unique Clustered Index [IX_ViewSample]

On [dbo].[SampleView]

(Id2 Asc)

Go

 

— Alterando o tipo de contagem de dados —

Create View SampleView

With SchemaBinding

As

Select COUNT_BIG(*) TableCount,

Id2

From dbo.MySampleTable

Group By Id2

 

— Criando o Índice —

Create Unique Clustered Index [IX_ViewSample]

On [dbo].[SampleView]

(Id2 Asc)

Go

 

— Short Script 4 – Utilizando o comando Intersect com valores Char e Int —

Create Table #A (x Char(2));

 

Insert Into #A Values (‘1’);

Insert Into #A Values (‘6’);

Insert Into #A Values (‘2’);

Insert Into #A Values (‘3’);

Insert Into #A Values (‘5’);

Insert Into #A Values (‘5’);

Insert Into #A Values (‘6’);

Insert Into #A Values (‘9’);

Go

 

Create Table #B (M BigInt);

 

Insert Into #B Values(5);

Insert Into #B Values(5);

Insert Into #B Values(6);

Insert Into #B Values(7);

Insert Into #B Values(7);

Go

 

SELECT x AS ‘Select #1’ FROM #A

INTERSECT SELECT M FROM #B;

 

— (Select #2)

SELECT DISTINCT(x) AS ‘Select #2’

FROM #A

LEFT OUTER JOIN #B

ON #A.x = #B.M

 

— (Select #3)

SELECT DISTINCT(x) AS ‘Select #3’

FROM #A

LEFT OUTER JOIN #B

ON #A.x = #B.M

 

— (Select #4)

SELECT DISTINCT(x) AS ‘Select #4’

FROM #A

INNER JOIN #B

ON #A.x = #B.M

 

— (Select #5)

SELECT x AS ‘Select #5’

FROM #A

INNER JOIN #B

ON #A.x = #B.M

 

— Short Script 5 – Criando User Function com base na Tabela Price —

CREATE FUNCTION CalcPrest (@C money, @i numeric(9,5), @n int)

returns table as return

SELECT Cast(@C *

(Power((1 + (@i / 100)), @n) * (@i / 100)) /

(Power((1 + (@i / 100)), @n) -1)

as money) as Prestação;

go

 

— Short Script 6 – Select “*” não retornando todas as colunas de uma tabela —

— Exemplo 1 —

DROP TABLE #temp;

 

CREATE TABLE #temp (

RowID INT IDENTITY PRIMARY KEY CLUSTERED,

Name VARCHAR(25),

Column1 INT SPARSE,

Column2 INT SPARSE,

Column3 INT SPARSE,

Column4 INT SPARSE,

ColumnSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);

 

INSERT INTO #temp (Name, Column1) VALUES (‘Row1’, 1);

INSERT INTO #temp (Name, Column1, Column2) VALUES (‘Row2’, 2, 2);

INSERT INTO #temp (Name, Column1, Column2, Column3) VALUES (‘Row3’, 3, 3, 3);

INSERT INTO #temp (Name, Column1, Column2, Column3, Column4) VALUES (‘Row4’, 4, 4, 4, 4);

INSERT INTO #temp (Name, Column1, Column3) VALUES (‘Row5’, 5, 5);

INSERT INTO #temp (Name, Column3, Column4) VALUES (‘Row6’, 6, 6);

 

SELECT * FROM #temp;

— Exemplo 2 —

DROP TABLE #temp;

 

CREATE TABLE #temp (

RowID INT IDENTITY PRIMARY KEY CLUSTERED,

Name VARCHAR(25),

Column1 INT SPARSE,

Column2 INT SPARSE,

Column3 INT SPARSE,

Column4 INT SPARSE);

 

INSERT INTO #temp (Name, Column1) VALUES (‘Row1’, 1);

INSERT INTO #temp (Name, Column1, Column2) VALUES (‘Row2’, 2, 2);

INSERT INTO #temp (Name, Column1, Column2, Column3) VALUES (‘Row3’, 3, 3, 3);

INSERT INTO #temp (Name, Column1, Column2, Column3, Column4) VALUES (‘Row4’, 4, 4, 4, 4);

INSERT INTO #temp (Name, Column1, Column3) VALUES (‘Row5’, 5, 5);

INSERT INTO #temp (Name, Column3, Column4) VALUES (‘Row6’, 6, 6);

 

SELECT * FROM #temp;

 

— Short Script 7 – Trabalhando com XML em conjunto com SP_XML_PrepareDocument –

Declare @Table As Table (SINo Int, Name Varchar(500), Salary Money)

Declare @XMLIntLog As XML

Declare @IDoc Int

 

Set @XMLIntLog = Null

Insert Into @Table Values(1,’SES’,10000)

Insert Into @Table Values(2,’SRS’,40000)

Insert Into @Table Values(3,’SS’,50000)

Set @XMLIntLog = (Select SINo, Name, Salary from @Table Tab For XML Auto, Root(‘Root’), elements)

 

Exec sp_xml_preparedocument @IDoc Output, @XMLIntLog

 

Select SINo, Name, Salary from OpenXML(@iDoc, ‘/Root/Tab’,7)

With(SINo Int, Name Varchar(500), Salary Money)

 

Exec sp_xml_removedocument @IDoc

 

— Short Script 8 – Utilizando Sparse Columns e Sparse Columns Sets —

CREATE TABLE dbo.Table1 (

RowID INTEGER IDENTITY PRIMARY KEY CLUSTERED,

DateTimeStamp DATETIME DEFAULT GETDATE(),

Col1 INTEGER SPARSE,

Col2 INTEGER SPARSE,

Col3 INTEGER SPARSE,

TblColumnSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);

 

INSERT INTO dbo.Table1 (Col1) VALUES (1), (2);

INSERT INTO dbo.Table1 (Col2) VALUES (3), (4);

INSERT INTO dbo.Table1 (Col3) VALUES (5), (6);

INSERT INTO dbo.Table1 (TblColumnSet) VALUES (‘<Col1>1</Col1><Col2>2</Col2><Col3>3</Col3>’);

 

SELECT RowID, DateTimeStamp, Col1, Col2, Col3, TblColumnSet

FROM dbo.Table1;

 

Agradeço a sua visita, espero que este material posso te ajudar, qualquer dúvida, sugestão ou crítica post o seu comentário.

Até mais.

Short Script – Maio – 2015


Bom dia, pessoal, mais uma semana começando.

Mantendo a tradição e escrita, estou começando mais um mês no meu blog, compartilhamento com todos vocês a minha relação de Scripts que atualmente esta crescendo muito graças ao SQLServerCentral.com.

Venho diariamente estudando e respondendo as questões diárias que são publicadas no SQLServerCentral.com, pelos principais nomes e especialistas em SQL Server do Mundo, estou seguindo nesta caminhada desde o final do mês de fevereiro. Posso dizer que esta sendo uma oportunidade fantástica de relembrar, conhecer, aprender e também descobrir muitos segredos, novidades e principalmente informações sobre o Microsoft SQL Server em todas as suas versões.

Aproveito a oportunidade para indicar e recomendar sua visita ao SQLServerCentral.com, principalmente a sessão de Question of the Day: http://www.sqlservercentral.com/Questions

Pois bem, na relação de Short Scripts que estou disponibilizando hoje, boa parte destes códigos são resultado das questões que eu respondi no SQLServerCentral.com e identifiquei como questões importantes ou relevantes para meus estudos, bem como, para repassar para meus alunos.

Nesta relação, você terá a oportunidade de conhecer e aprender um pouco mais sobre:

·         Análise e Lógica Condicional com operadores Not, And e Or;
·         Colunas Computadas;
·         Complexidade Lógica;
·         CTE Recursiva;
·         Declaração de variáveis do Tipo XML em conjunto com Select;
·         Função Coalesce em conjunto com Left Join e valores nulos; e
·         Funções Char(), NChar(), Unicode() e ASCII();
·         Identificando ausência de índices em tabelas;
·         Índices Clusterizados e Índices Chaves;
·         Índices com colunas duplicadas;
·         Operador Intersect;
·         Taxas de Fragmentação de Tabelas antes e depois do Rebuild;
·         Transações aninhadas;
·         Utilitário BCP para criação de arquivos XML.

 

Legal, a seguir você poderá encontrar os Short Scripts separados por seus respectivos conteúdos:

  • Análise, Precedência e Lógica Condicional com operadores Not, And e Or    VALUES ( 1, ‘Baseball Hat’ ),           ( 3, ‘Snowboard’ ),           ( 5, ‘Shows’ )SELECT ID   WHERE Product = ‘Bicycle’ OR Product = ‘Snowboard’ AND ID = 4

 

  1.    FROM @Logic
  2.            ( 4, ‘Goggles’ ),
  3.          ( 2, ‘Bicycle’ ),
  4. INSERT INTO @Logic
  5. DECLARE @Logic TABLE ( ID INT, Product VARCHAR(50) )

 

  • Colunas Computadas   (   , col1Computed AS LEFT(col1, 4)   , col2Computed AS LEFT(col2, 4)   , col3Computed AS LEFT(col3, 4)   , col4Computed AS LEFT(col4, 4) 

 

  1.    );
  2.    , col4 CHAR(8) NOT NULL
  3.    , col3 CHAR(8) NULL
  4.    , col2 VARCHAR(8) NOT NULL
  5.      col1 VARCHAR(8) NULL
  6. CREATE TABLE t
  7. Complexidade Lógica

DECLARE @AA VARCHAR(12) = ‘AAA’

,@XXX           VARCHAR(12) = ‘AAA’

,@YYY           VARCHAR(12) = ‘BBB’

,@ZZZ           VARCHAR(12) = ‘CCC’

,@AAXXX         VARCHAR(12) = ‘XXAAA’

,@AAYYY         VARCHAR(12) = ‘XXBBB’

,@AAZZZ         VARCHAR(12) = ‘XXCCC’

,@XXXCount       INT = 1

,@YYYCount       INT = 1

,@ZZZCount       INT = 1

,@AAXXXCount     INT = 1

,@AAYYYCount     INT = 1

,@AAZZZCount     INT = 1

,@Result       INT;

 

— Much to your chagrin, you encounter the following logic in a SQL SP.

— You may assume that each local variable is DECLAREd and @AA,

— @XXX, @YYY, @ZZZ, @AAXXX, @AAYYY, @AAZZZ each have a value assigned,

— with only @AA required to be NOT NULL. Each @xxxCount variable

— is also assigned an integer value.

SET @Result = 0;

 

IF @AA = @XXX

BEGIN

IF @XXXCount > @AAXXXCount SET @Result = 2

END

ELSE IF @AA = @YYY

BEGIN

IF @YYYCount > @AAYYYCount SET @Result = 2

END

ELSE IF @AA = @ZZZ

BEGIN

IF @ZZZCount > @AAZZZCount SET @Result = 2

END

ELSE IF @AA = @AAXXX

BEGIN

IF @XXXCount = @AAXXXCount SET @Result = 3

END

ELSE IF @AA = @AAYYY

BEGIN

IF @YYYCount = @AAYYYCount SET @Result = 3

END

ELSE IF @AA = @AAZZZ

BEGIN

IF @ZZZCount = @AAZZZCount SET @Result = 3

END

 

— Identify the equivalent logic from the options shown:

— Option 1:

SET @Result = 0;

 

IF @AA = @XXX AND @XXXCount > @AAXXXCount SET @Result = 2

ELSE IF @AA = @YYY AND @YYYCount > @AAYYYCount SET @Result = 2

ELSE IF @AA = @ZZZ AND @ZZZCount > @AAZZZCount SET @Result = 2

ELSE IF @AA = @AAXXX AND @XXXCount = @AAXXXCount SET @Result = 3

ELSE IF @AA = @AAYYY AND @YYYCount = @AAYYYCount SET @Result = 3

ELSE IF @AA = @AAZZZ AND @ZZZCount = @AAZZZCount SET @Result = 3

 

SELECT [Option 1:]=@Result

SELECT @Result = NULL;

 

 

— Option 2:

IF @AA = @XXX AND @XXXCount > @AAXXXCount SET @Result = 2

ELSE IF @AA = @YYY AND @YYYCount > @AAYYYCount SET @Result = 2

ELSE IF @AA = @ZZZ AND @ZZZCount > @AAZZZCount SET @Result = 2

ELSE IF @AA = @AAXXX AND @XXXCount = @AAXXXCount SET @Result = 3

ELSE IF @AA = @AAYYY AND @YYYCount = @AAYYYCount SET @Result = 3

ELSE IF @AA = @AAZZZ AND @ZZZCount = @AAZZZCount SET @Result = 3

ELSE SET @Result = 0;

 

SELECT [Option 2:]=@Result

SELECT @Result = NULL;

 

— Option 3:

SELECT @Result = CASE @AA

WHEN @XXX THEN CASE WHEN @XXXCount > @AAXXXCount THEN 2 ELSE 0 END

WHEN @YYY THEN CASE WHEN @YYYCount > @AAYYYCount THEN 2 ELSE 0 END

WHEN @ZZZ THEN CASE WHEN @ZZZCount > @AAZZZCount THEN 2 ELSE 0 END

WHEN @AAXXX THEN CASE WHEN @XXXCount = @AAXXXCount THEN 3 ELSE 0 END

WHEN @AAYYY THEN CASE WHEN @YYYCount = @AAYYYCount THEN 3 ELSE 0 END

WHEN @AAZZZ THEN CASE WHEN @ZZZCount = @AAZZZCount THEN 3 ELSE 0 END

END;

 

SELECT [Option 3:]=@Result          — Not identical

SELECT @Result = NULL;

 

— Option 4:

SELECT @Result = CASE @AA

WHEN @XXX THEN CASE WHEN @XXXCount > @AAXXXCount THEN 2 ELSE 0 END

WHEN @YYY THEN CASE WHEN @YYYCount > @AAYYYCount THEN 2 ELSE 0 END

WHEN @ZZZ THEN CASE WHEN @ZZZCount > @AAZZZCount THEN 2 ELSE 0 END

WHEN @AAXXX THEN CASE WHEN @XXXCount = @AAXXXCount THEN 3 ELSE 0 END

WHEN @AAYYY THEN CASE WHEN @YYYCount = @AAYYYCount THEN 3 ELSE 0 END

WHEN @AAZZZ THEN CASE WHEN @ZZZCount = @AAZZZCount THEN 3 ELSE 0 END

ELSE 0 END;

 

SELECT [Option 4:]=@Result

SELECT @Result = NULL;

 

— Option 5:

SELECT @Result = CASE @AA

WHEN @XXX THEN CASE WHEN @XXXCount > @AAXXXCount THEN 2 END

WHEN @YYY THEN CASE WHEN @YYYCount > @AAYYYCount THEN 2 END

WHEN @ZZZ THEN CASE WHEN @ZZZCount > @AAZZZCount THEN 2 END

WHEN @AAXXX THEN CASE WHEN @XXXCount = @AAXXXCount THEN 3 END

WHEN @AAYYY THEN CASE WHEN @YYYCount = @AAYYYCount THEN 3 END

WHEN @AAZZZ THEN CASE WHEN @ZZZCount = @AAZZZCount THEN 3 END

ELSE 0 END;

 

SELECT [Option 5:]=@Result   — Not identical

 

  • CTE Recursiva set @DataFim = ‘20150430’;with CTE_Datas as   select @DataIni as Data, @DataFim as DataFim   union all   select DATEADD(DAY, 1, Data), DataFim   where Data < DataFim 

 

  1. select Data from CTE_Datas
  2. )
  3.    from CTE_Datas
  4. (
  5. set @DataIni = ‘20150401’;
  6. declare @DataIni date, DataFim date;

 

  • Declaração de variáveis do Tipo XML em conjunto com Select

 

DECLARE @Xml XML = N’

<products>

<product id=”1″ name=”Adjustable Race” />

<product id=”879″ name=”All-Purpose Bike Stand” />

<product id=”712″ name=”AWC Logo Cap” />

<product id=”19910″ name=”Cozonac” />

</products>’;

 

SELECT

xt.xc.value(‘@id’, ‘INT’) AS ProductID,

xt.xc.value(‘@name’,’NVARCHAR(50)’) AS Name

FROM

@Xml.nodes(‘/products/product’) AS xt(xc);

 

  • Função Coalesce em conjunto com Left Join e valores nulos(a int null, c int null)(x int null, z int null)

 

  1. y int null,
  2. Create table #xyz
  3. b int null,
  4. Create table #abc

 

 

Insert Into #abc values(null, null, 3), (1,null,3),(1,null,null),(null,2,null)

 

Insert Into #xyz values(null,2,3),(null,null,1),(null,null,2)

 

— Q1

SELECT

*

FROM

#abc a

LEFT JOIN #xyz x

ON a.a = x.x

AND a.b = x.y;

 

— Q2

SELECT

*

FROM

#abc a

LEFT JOIN #xyz x

ON COALESCE(a.a, 9) = COALESCE(x.x, 9)

AND COALESCE(a.b, 9) = COALESCE(x.y, 9);

 

 

  • Funções Char(), NChar(), Unicode() e ASCII()SELECT ASCII(36)   SELECT NCHAR(10084)  

 

    1. SELECT UNICODE(10084)
    2. SELECT CHAR(36)
  • Identificando ausência de índices em tabelas             user_scans, ID.equality_columns, FROM sys.dm_db_missing_index_group_stats GS LEFT OUTER JOIN sys.dm_db_missing_index_groups IG                                                                                                                                                                                                                                LEFT OUTER JOIN sys.dm_db_missing_index_details ID Where ID.database_id = DB_ID(‘CycleCount’) 

 

    1. ORDER BY avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)DESC
    2.                                                                                                                                                                                                                                On (ID.index_handle = IG.index_handle)
    3.                                                                                    On (IG.index_group_handle = GS.group_handle)
    4.              ID.inequality_columns, ID.included_columns, ID.statement
    5. SELECT avg_total_user_cost, avg_user_impact, user_seeks,
  • Índices Clusterizados e Índices Chaves

 

SELECT t.name, i.name, i.type_desc, c.name

FROM sys.tables t

INNER JOIN sys.indexes i

INNER JOIN sys.index_columns ic

INNER JOIN sys.columns c

ON ic.object_id = c.object_id AND ic.column_id = c.column_id

ON i.object_id = ic.object_id AND i.index_id = ic.index_id

ON t.object_id = i.object_id AND i.index_id = 1;

GO

 

  • Índices com colunas duplicadas   (select distinct object_name(i.object_id) tablename,i.name indexname,                                       from sys.index_columns ic1 inner join                                                              ic1.column_id=c.column_id                                           ic1.object_id=i.object_id and                                      order by index_column_id FOR XML PATH(”)),1,2,”)               where object_id=i.object_id and index_id=i.index_id) as columnlist        sys.index_columns ic on i.object_id=ic.object_id and            sys.objects o on i.object_id=o.object_id    (select distinct object_name(i.object_id) tablename,i.name indexname,                                       from sys.index_columns ic1 inner join                                                              ic1.column_id=c.column_id                                           ic1.object_id=i.object_id and                                     order by index_column_id FOR XML PATH(”)),1,2,”)               where object_id=i.object_id and index_id=i.index_id) as columnlist        sys.index_columns ic on i.object_id=ic.object_id and            sys.objects o on i.object_id=o.object_id        substring(t2.columnlist,1,len(t1.columnlist))=t1.columnlist and          (t1.columnlist=t2.columnlist and t1.indexname<>t2.indexname))

 

  1. Go
  2.        (t1.columnlist<>t2.columnlist or
  3. where o.is_ms_shipped=0) t2 on t1.tablename=t2.tablename and
  4.                                    i.index_id=ic.index_id inner join
  5.        from sys.indexes i inner join
  6.                from sys.index_columns ic
  7.                                            ic1.index_id=i.index_id
  8.                                      where ic1.index_id = ic.index_id and
  9.                                            sys.columns c on ic1.object_id=c.object_id and
  10.              (select distinct stuff((select ‘, ‘ + c.name
  11.      where o.is_ms_shipped=0) t1 inner join
  12.                                    i.index_id=ic.index_id inner join
  13.        from sys.indexes i inner join
  14.                from sys.index_columns ic
  15.                                            ic1.index_id=i.index_id
  16.                                      where ic1.index_id = ic.index_id and
  17.                                            sys.columns c on ic1.object_id=c.object_id and
  18.              (select distinct stuff((select ‘, ‘ + c.name
  19. select t1.tablename,t1.indexname,t1.columnlist,t2.indexname,t2.columnlist from

 

  • Operador Intersect

 

CREATE TABLE A ( x INT )

 

INSERT INTO A

VALUES ( 18 ),

( 20 ),

( 4 ),

( 1 ),

( 2 )

 

CREATE TABLE B ( Y INT )

 

INSERT INTO B

VALUES ( 1 ),

( 20 ),

( 2 ),

( 3 )

 

SELECT X AS ‘Intersecting’

FROM A

INTERSECT

SELECT Y

FROM B

 

  • Taxas de Fragmentação de Tabelas antes e depois do Rebuild

 

Select

object_name(ddips.object_id) [Table_name],

convert(decimal(5,2),isnull(ddips.avg_fragmentation_in_percent,0)) [Ext_frag],

ddips.page_count [Pages],

ddips.compressed_page_count

From sys.dm_db_index_physical_stats(db_id(), object_id(‘produtos’), null, null, ‘detailed’) ddips

  • Transações aninhadas

 

CREATE Table TranTable(col varchar(3))

GO

 

BEGIN TRAN A

INSERT INTO TranTable (col) Values (‘abc’)

BEGIN TRAN B

INSERT INTO TranTable (col) Values (‘def’)

SAVE TRAN B

BEGIN TRAN C

INSERT INTO TranTable (col) Values (‘ghi’)

COMMIT TRAN C

ROLLBACK TRAN B

INSERT INTO TranTable (col) Values (‘xyz’)

COMMIT TRAN A

GO

 

Select col from TranTable

GO

 

Drop TABLE TranTable

GO

 

  • Utilitário BCP para criação de arquivos XML

 

— Exemplo 1 —

 

DECLARE @FileName varchar(50),

@bcpCommand varchar(2000)

 

SET @FileName = ‘C:\Users\test.xml’

SET @bcpCommand = ‘bcp “SELECT

”CustomerID” AS ”Parameter/name”, CustomerID AS ”Parameter/value”,

”ContactName” AS ”Parameter/name”, ContactName AS ”Parameter/value”,

”CompanyName” AS ”Parameter/name”, CompanyName AS ”Parameter/value”

FROM Sales.Customers

FOR XML PATH(”T2Method”), ROOT(”Parking”), TYPE, ELEMENTS” queryout “‘

 

SET @bcpCommand = @bcpCommand + @FileName + ‘” -T -c -x’

 

print(@bcpCommand)

 

EXEC master..xp_cmdshell @bcpCommand

 

 

 

— Exemplo 2 —

Declare @Contador Int,

@FileName varchar(50),

@bcpCommand varchar(2000)

 

Set @Contador = 1

 

While @Contador <=(Select Count(IDdaSuaTabela) from SuaTabela)

Begin

 

SET @bcpCommand = ‘bcp “SELECT ”CustomerID” AS ”Parameter/name”, CustomerID AS ”Parameter/value”,

”ContactName” AS ”Parameter/name”,

ContactName AS ”Parameter/value”,

”CompanyName” AS ”Parameter/name”,

CompanyName AS ”Parameter/value”

FROM Sales.Customers

Where IDdaSuaTabela = @Contador

FOR XML PATH(”T2Method”), ROOT(”Parking”), TYPE, ELEMENTS” queryout “‘

 

SET @FileName = ‘C:\Users\test-arquivo-‘+Convert(Varchar(10),@Contador)+’.xml’

SET @bcpCommand = @bcpCommand + @FileName + ‘” -T -c -x’

 

EXEC master..xp_cmdshell @bcpCommand

 

Set @Contador += 1

End

Mais uma vez obrigado por sua visita, fique à vontade para compartilhar este material com seus contatos. Dúvidas, comentários, sugestões e críticas, envie seu comentário ou se preferir um e-mail.

Até mais.

Material de Apoio – Apresentações


Salve, Salve Comunidade!!!!

Que bom que esta chovendo, Graças a Deus, pois aqui em São Roque também já estavamos sofrendo com a falta de água e possível racionamento.

Mas vamos ao que interessa, estou compartilhando com vocês mais um post em meu blog, com uma nova série de Materiais de Apoio desenvolvidos como Apresentações sobre Produtos e Tecnologias da Microsoft.

Dentre eles:

  • Active Directory;
  • Aplicações para Windows Phone;
  • Clico de Vida de Produtos;
  • Computação em Nuvem;
  • Exchange;
  • IIS 7.5;
  • Office 365;
  • System Center 2012;
  • Terminal Sevices;
  • Virtualização;
  • VM Ware;
  • XML e XAML;
  • Windows Phone;
  • Windows 7 e 8; e
  • Windows Server.

Boa parte deste material foi elaborado por Profissionais, Parceiros e MVPs da Microsoft para eventos voltados para área de Tecnologia da Informação. As informações continas nestes arquivos são de extrema importância e veracidade, consideradas documentação oficial de Produtos e Tecnologias.

Fiquem a vontade para compartilhar este conteúdo com sua rede de contatos, repassando conhecimento e fortalecendo cada vez mais o papel de Comunidade.

Segue abaixo a relação de arquivos:

Como clientes do BPOS podem se preparar para o Microsoft Office 365

Explorando as possibilidades de desenvolvimento no Office 365

Microsoft Exchange Online no Microsoft Office 365 Migração ao vivo!

Microsoft Exchange Server e Microsoft Office 365 Como realizar uma implantação hibrida

Microsoft Office 365 Visão Geral de implantação Office 365 O Futuro da Produtividade

Acesso a base de dados (local DB) no WP 7

Ciclo de Vida e Performance de Aplicações no WP7

Desenvolvendo Games para Windows Phone 7 com XNA e Visual

Entendendo a plataforma de desenvolvimento do Windows Phone 7

Multi-tasking en Windows Phone 7 MVVM avançado para o Windows Phone 7

Push Notifications, Tiles, camera e sensores no WP7

XAML Avançado para Windows Phone 7 WPH305

Além do Remote Desktop Services

Como montar um ambiente de alta disponibilidade com o Hyper-V

Compare as Tecnologias de Memória no VMware e Microsoft

Conheça o System Center Virtual Machine Manager 2012

Gerenciando ambientes com Vmware através do System Center Virtual Machine Manager 2012

Melhores Práticas para Implementação de “Private Cloud”

Melhores Práticas para Virtualização de Exchange 2010 VIR310

Prepare-se para o futuro da Virtualização Microsoft

Private Cloud + Public Cloud

Private Cloud na Prática

Virtualização de Aplicações com o  App-V 4.6 SP1

AppCompat sem alteração de código fonte

Gerenciando e protegendo estações de trabalho com Windows Intune

Implantação e gerenciamento do BitLocker com o MBAM

Migração e Compatibilidade de aplicações para IE9 e IE10

Consolidação de Serviços de Armazenamento com Windows Server 2008 R2 e SMB2

Gerenciando Recursos com o Windows System Resource Manager do Windows 2008 R2

Migrando Apps para IIS 7.5

O Futuro da Plataforma de Infraestrutura da Microsoft

Plataforma Windows Server para pequenas e medias empresas

Virtualização e Cenários de Cloud A tecnologia servindo aos objetivos dos clientes

Windows Server 8 Cloud Optimized

 

Mais uma vez obrigado por sua visita, espero que este conteúdo possa ser útil e ajude em suas atividades diárias.

Até amis.