Microsoft SQL Server Data Tools v15.5.1 para Visual Studio 2017 disponível


O SQL Server Data Tools v15.5.1 é uma ferramenta de desenvolvimento moderna que você pode baixar gratuitamente para criar bancos de dados relacionais do SQL Server, bancos de dados SQL do Azure, pacotes do Integration Services, modelos de dados do Analysis Services e relatórios do Reporting Services.

Com o SSDT, você pode projetar e implantar qualquer tipo de conteúdo do SQL Server com a mesma facilidade com que desenvolve um aplicativo no Visual Studio.

O SQL Server Data Tools v15.5.1 para Visual Studio 2017 está disponível para download aqui e é compatível com o Windows 7 SP1, Windows 8.1, Windows 10, Windows Server 2012 R2 e Windows Server 2016.

SQL Server Data Tools v15.5.1 para Visual Studio 2017Esta versão do SSDT pode ser instalada nos seguintes idiomas:

Chinês (República Popular da China) | Chinês (Taiwan) | Inglês (Estados Unidos) | Francês | Alemão | Italiano | Japonês | Coreano | Português (Brasil) | Russo | Espanhol

De acordo com o changelog, esta versão traz a correção de um problema no qual o instalador trava na pós-instalação do SQL Server Integration Services e a correção de um problema no qual a instalação falha com a seguinte mensagem de erro: “Não há suporte para a operação de metarquivo solicitada (0x800707D3)”.

IMPORTANTE: Antes de instalar o SSDT v15.5.1 para Visual Studio 2017, desinstale as extensões “Projetos do Microsoft Analysis Services” e “Projetos do Microsoft Reporting Services”, caso eles já estejam instalados no VS 2017 e feche todas as instâncias do VS.

Mais informações sobre o SQL Server Data Tools podem ser encontradas aqui. Ele também possui uma versão para o Visual Studio 2015.

Fontes e Direitos Autorais: https://docs.microsoft.com/pt-br/sql/ssdt/changelog-for-sql-server-data-tools-ssdt

Anúncios

#19 – Para que serve


Salve galera, boa tarde.

Feliz Ano Novo, Feliz 2018, o tempo passou e hoje dia 02/01 nos encontramos no primeiro dia útil para grande maioria da população mundial, mas que dureza pensar que temos mais 365 dias pela frente para superarmos, por outro lado que bom pensar assim.

Neste primeiro post de 2018 não vou trazer nenhuma novidade relacionada ao Microsoft SQL Server ou banco de dados, mas sim compartilhar como faço em alguns momentos, conceitos já conhecidos da grande maioria.

Hoje quero trazer para vocês um dos assuntos mais discutidos quando estamos trabalhando com nossos servidores de banco de dados, estou me referindo ao período de processamento do comando select dentro de um bloco de transação conhecido como Ciclo de Vida de Query através do comando Select.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o primeiro post de 2018, post de número 19 da sessão Para que serve. Entã seja bem vindo ao #19 – Para que serve – Ciclo de Vida de Query através do comando Select.


Introdução

Um dos comandos mais utilizados em qualquer Sistema Gerenciador de Banco de Dados ou propriamente um Banco de Dados é o comando Select, sendo este responsável em recuperar linhas do banco de dados e permite a seleção de uma ou várias linhas ou colunas de uma ou várias tabelas, no Microsoft SQL Server isso não é diferente.

Basicamente ao se executar um comando Select podemos estar trabalhando com uma simples query ou conjunto de querys que podem formar uma ou mais transações, é com base neste cenário que o comando Select composto por sua conjunto de argumentos e opções permite estabelecer um ciclo de vida dedicado exclusivamente ao seu período de compilação, execução e encerramento.

Desta forma, algumas perguntas podem surgir decorrentes do seu processo de processamento, dentre as quais destaco:

  1. Quais são as etapas para o processamento de um select? 
  2. Onde inicia e onde termina cada processo?

De uma maneira bastante simples e direta vou tentar responder estas questões, iniciando pela organização da estrutura de componentes utilizadas pelo comando Select, conhecidos como:

  • Relation Engine;
  • Storage Engine; e
  • Buffer Pool.
  1. Relational Engine é responsável pelos processos de Query Optmizer, Query Executor e Parse entre outros, avaliando toda a parte algébrica, sintaxe e plano de execução da Query.
  2. Storage Engine é o cara do I/O, responsável pelo gerenciamento e requisições de disco, alocações, Access Methods Code, Buffer Manager e Transaction MGR.
  3. Buffer Pool tem vários papeis, mas, um dos mais importantes é o gerenciamento de memória para o plano de execução e alocação de páginas no data cache.

A Figura 1 apresentada abaixo ilustra um modelo básico da estrutura de relação entre estes componentes:

Figura 1 – Estrutura dos componentes utilizados pelo comando select.

Logicamente, dentro de cada componente podemos encontrar diversos subcomponentes que formam sua estrutura, responsáveis por diversas ações e procedimentos, formando um ecossistema único para cada elemento, dentre eles destaco o Query Optimizer com suas diversas fases de otimização para gerar o plano de execução mais assertivo.

O Ciclo (Select)

O primeiro passo é estabelecer a conexão entre aplicação (ERP, CRM, Web, etc…) e o SQL Server. Para isso, é utilizado um protocolo chamado Network Interface (SNI). No fundo o SNI utiliza um outro protocolo, na verdade, podem existir vários protocolos e o mais conhecido é o famoso TCP/IP.

A Figura 2 abaixo ilustra o inicio do ciclo de vida do comando select através do acesso feito por uma aplicação:

Figura 2 – Representação do inicio do ciclo de vida do comando select.

Ao realizar a conexão através da comanda e do protocolo (TCP/IP), os pacotes TDS (Tabular Data Stream Endpoints) são encaminhados ao Protocolo Layer, que tem como papel “reconhecer e interpretar” o pacote e validar a informação, assim como sua origem (client). Após isso o conteúdo (SQL Command) do pacote é enviado ao Command Parse.

A Figura 3 apresenta o comportamento do Command Parse após o processo de reconhecimento e interpretação do pacote contendo o comando select ser realizado:

Figura 3 – Comportamento do Command Parse após o processo de reconhecimento dos pacotes.

Neste cenário o CMD Parser vai fazer o seu trabalho, primeiro validando o T-SQL, checando sintaxe, nomes de objetos, parâmetros, palavras chaves. A segunda parte é procurar no Buffer Pool se já existe um plano de execução compatível para está query, se sim, ele recupera este plano e executa (Query Executor), caso contrário, passa o result da análise (Query Tree) para o Query Optmizer que é o responsável por gerar o Execution Plan (plano de execução) que será usado na execução (próxima etapa) do ciclo.

Ao receber as instruções o Query Optimizer,  identifica a query realizando diversas etapas (fases 0,1,2) de otimização, afim de encontrar o plano mais eficiente, com base no “cost-based” (I/O, CPU). Nesta etapa as estatísticas são utilizadas servindo como Input de informação para tomada de decisão do Query Optimizer. Após o termino desta etapa, o plano de execução está pronto, passando o bastão para o Query Executor

O Query Executor é quem executa a Query, na verdade ele executa o plano de execução, colocando os operadores para trabalhar. É neste ponto também que ocorre a interação com a Storage Engine via interface Access Methods (OLE DB).

Seguindo em frente, Access Methods passa a solicitação para o Buffer Manager recuperar a página de dados, se a página especifica estiver em memória, o Buffer Pool solicita ao Data Cache que recupere a pagina, e retorna ao Access Methods (leituras logicas). Ao contrário, os dados são recuperados do disco (leituras físicas), colocados em cache e devolvendo o controle para o Access Methods. 

De posse dos dados, o Access Methods devolve a informação para o Relational Engine que será enviada ao Client que a solicitou, assim o resultando do comando select é apresentado na tela da aplicação exibindo assim os dados solicitados pelo usuário. Desta maneira, nosso ciclo ou melhor o ciclo de vida do comando select esta concluído, conforme a Figura 4 apresenta abaixo:

Figura 4 – Ciclo de vida do comando select concluído e dados apresentados para o usuário.

Com isso chegamos ao final do primeiro post de 2018 e post de número 19 da sessão Para que serve.


Referências

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-transact-sql

https://technet.microsoft.com/en-us/library/ms189559(v=sql.90).aspx

http://www.sqlservergeeks.com/sql-server-architecture-part-2-the-relational-engine/

https://blogs.msdn.microsoft.com/tcaserta/2016/01/04/sql-server-fundamentos-storage-engine-parte-i/

https://blogs.msdn.microsoft.com/tcaserta/2016/01/04/sql-server-fundamentos-storage-engine-parte-i/

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar um dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2017/12/15/18-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/11/24/17-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/10/01/16-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/06/28/15-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/04/30/14-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/03/25/13-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/01/23/12-para-que-serve/

Conclusão

Como sempre a Microsoft e toda sua equipe nos surpreende com sua capacidade de trabalho, fortalecendo cada vez mais o Microsoft SQL Server não somente com um SGBD ou ferramenta de banco de dados, mas sim um ambiente completo para qualquer tipo de análise, desenvolvimento e administração que esteja relacionada com dados.

Este é o fantástico Microsoft SQL Server, surpreendente em todos os sentidos…

Agradecimentos

Mais uma vez obrigado por sua ilustre visita, sinto-me honrado com sua presença, espero que este conteúdo possa lhe ajudar e ser útil em suas atividades profissionais e acadêmicas.

Um forte abraço, até o próximo post da sessão Para que serve…..

Valeu.

Microsoft disponibiliza atualização cumulativa 9 para SQL Server 2014 SP2


A Microsoft disponibilizou para download nesta semana a Atualização Cumulativa 9 para SQL Server 2014 SP2. Esta atualização contém correções para os problemas que foram descobertos depois do lançamento do SQL Server 2014 SP2.

O SP2 foi lançado pela Microsoft em julho de 2016.

Atualização Cumulativa 9 para SQL Server 2014 SP2

De acordo com o artigo KB4055557 publicado no site de suporte da Microsoft, a Atualização Cumulativa 9 altera o build para 12.0.5563.0 e traz correções para múltiplos bugs.

Entre os bugs corrigidos estão que faz com que o DBCC CHECKDB retorne erros de consistência se a função SOUNDEX é usada em certos cenários e um que gera o erro “Invalid comparison due to NO COLLATION”.

A lista completa com todos os bugs corrigidos por esta atualização cumulativa pode ser vista no link acima.

A Atualização Cumulativa 9 para SQL Server 2014 SP2 está disponível para download aqui em múltiplos idiomas para plataformas 32 e 64 bits.

Atualização Cumulativa 9 para SQL Server 2014 SP2
De acordo com o artigo KB4055557 publicado no site de suporte da Microsoft, a Atualização Cumulativa 9 altera o build para 12.0.5563.0 e traz correções para múltiplos bugs

Correcções incluídas neste pacote de atualizações cumulativas


Fontes e Direitos Autorais: Microsoft.com – 19/12/2017 –https://support.microsoft.com/pt-br/help/4055557/cumulative-update-9-for-sql-server-2014-sp2

#18 – Para que serve


Olá você, boa noite.

Tudo bem?

Este é mais um post da sessão Para que serve, nesta última sexta-feira de aulas aqui na Fatec São Roque, hoje meu queridos pimpolhos não estão presentes, final de semestre é sempre assim eles somem, mas eu estou aqui vivinho da silva e pronto para compartilhar um pouco do conhecimento adquirido nos alguns dias.

Hoje não vou destacar novidades adicionadas ao Microsoft SQL Server em suas últimas versões, ao contrário quero trazer para você um exemplo de código que poderá lhe ajudar muito ainda mais com um novo ano que esta se aproximando rapidamente. Sempre nesta época do ano diversos estabelecimentos comerciais, lojas e demais locais de compra e venda gostam de ofertar aos seus clientes aquele tradicional folhinha ou calendário mensal do próxima ano.

É justamente isso que este novo post da sessão Para que serve tem o objetivo de trazer, apresentar como podemos através de um script desenvolvido no Microsoft SQL Server criar um calendário mensal ou anual igualzinho aqueles que ganhamos nos finais de ano.

O melhor ainda neste calendário é que nossa tabela será estrutura respeitando rigorosamente os dias da semana e seus respectivos nomes. Sendo assim, chegou a hora de conhecer um pouco mais sobre estas novas funções, desta forma, seja bem vindo ao #18 – Para que serve – Criando um calendário mensal com dias da semana.


Introdução

Um dos elementos mais comuns de se encontrar nas casas, apartamentos, escolas e demais locais de convivência é um calendário ou folhinha de meses e dias pregada nas paredes, afixada em geladeiras, portas retratos entre outros locais de fácil acesso e visualização para todos.

O elemento chamado de calendário criado a milhares de anos tem como principal função ajudar nós pessoas a nos identificar no tempo, ou seja, trata-se de um recurso tão básico mas de extrema importância no que diz respeito ao dia-a-dia das pessoas e suas atividades.

Este tipo de recurso não poderia estar ausente no Microsoft SQL Server, não que ele esteja totalmente presente, mas através das funcionalidades existentes na linguagem Transact-SQL ou simplesmente T-SQL temos total capacidade de criarmos o nosso calendário mensal ou até mesmo anual contendo os dias da semana, o número da semana e posteriormente demais dados necessários que possam compor o seu calendário.

Para que você possa acompanhar o processo de criação deste calendário personalizado, vamos utilizar como base para nosso cenário uma simples tabela denominada CalendarioMensal, nome mais do que sugestivo, começamos então pela criação desta tabela conforme apresenta o Bloco de Código 1 a seguir:

— Bloco de Código 1 – Criando a Tabela CalendarioMensal —

Create Table CalendarioMensal
(Contador TinyInt Identity(1,1) ,
Semana SmallInt,
Segunda TinyInt Null,
Terca TinyInt Null,
Quarta TinyInt Null,
Quinta TinyInt Null,
Sexta TinyInt Null,
Sabado TinyInt Null,
Domingo TinyInt Null)
Go

Show nossa tabela CalendarioMensal esta criada e pronta para ser utilizada, nosso próxima passo é começar a estruturar o ambiente para darmos inicio a inserção dos dados que vão compor o calendário, neste caso, vamos estabelecer o dia inicial da semana e evitar a contagem de linhas a cada manipulação de dados, para tal vamos o Bloco de Código 2 conforme apresentado abaixo:

— Bloco de Código 2 – Definindo o dia inicial da semana e evitando a contagem de linhas —

— Definindo o dia inicial da semana —
Set DateFirst 7
Go

— Desativando a contagem de linhas após manipulação de dados —
Set NoCount On
Go

Observações:

  1. Ao utilizar a diretiva Set DateFirst temos a possibilidade de definir de acordo qual deverá ser o primeiro dia da semana dentro da sessão ou transação que estamos trabalhando independente do idioma, linguagem ou configurações regionais do seu sistema operacional. Neste caso, estou definindo através do número 7 que qualquer semana terá inicio no sétimo dia, ou seja, no sábado.
  2. Ao utilizar a diretiva Set NoCount informando o valor de On estamos orientando o Database Engine enviar uma instrução para o Query Processor que ao final do processamento da transação ou bloco de transação não deverão ser informadas em tela a quantidade de linhas processadas ou manipuladas pelo Database Engine.

Nosso próximo passo consiste na declaração das variáveis que iremos utilizar para definir o período de dias ou período mensal que queremos criar, desta forma, vamos utilizar as variáveis: @InicioDeMes, @FinalDeMes e @Contador, conforme o Bloco de Código 3 apresentado abaixo:

— Bloco de Código 3 – Definição e atribuição das variáveis —

— Declarando e definindo as variáveis —
Declare @InicioDeMes Datetime,
@FinalDeMes Datetime,
@Contador TinyInt

— Atribuindo os valores para as variáveis —
Set @InicioDeMes = ‘2018-01-01’
Set @FinalDeMes = ‘2018-01-31’
Set @Contador = 1

Note que estou definindo o período de dias que correspondem ao mês de janeiro de 2018, sendo assim, nosso calendário mensal será criado respeitando a quantidade de dias e períodos de semana específicos do próximo mês de janeiro.

Ufa, estamos caminhando bem, vamos em frente, agora já se aproximando do processo de inserção do respectivo período de dias informado anteriormente e na sequência a atualização de cada dia de acordo com o exclusivo e respectivo dia da semana, vamos então conhecer o Bloco de Código 4 apresentado abaixo, não se esqueça de executar este bloco pois ele é o mais importante:

— Bloco de Código 4 – Loop para inserção e atualização dos dias referentes ao mês informando —

While @InicioDeMes <= @FinalDeMes
Begin

— Inserindo os valores na Tabela Calendário —
Insert Into CalendarioMensal Default Values

While 1<=@Contador
Begin

Update CalendarioMensal
               Semana = IsNull(DatePart(Week, Segunda),Year(GetDate()-1)),
               Set Segunda = Case When DatePart(WeekDay,@InicioDeMes) = 2 Then DatePart(Day,@InicioDeMes) Else Segunda End,
              Terca = Case When DatePart(WeekDay,@InicioDeMes) = 3 Then DatePart(Day,@InicioDeMes) Else Terca End,
             Quarta = Case When DatePart(WeekDay,@InicioDeMes) = 4 Then DatePart(Day,@InicioDeMes) Else Quarta End,
             Quinta = Case When DatePart(WeekDay,@InicioDeMes) = 5 Then DatePart(Day,@InicioDeMes) Else Quinta End,
              Sexta = Case When DatePart(WeekDay,@InicioDeMes) = 6 Then DatePart(Day,@InicioDeMes) Else Sexta End,
              Sabado = Case When DatePart(WeekDay,@InicioDeMes) = 7 Then DatePart(Day,@InicioDeMes) Else Sabado End,
              Domingo = Case When DatePart(WeekDay,@InicioDeMes) = 1 Then DatePart(Day,@InicioDeMes) Else Domingo End              
Where Contador = @Contador
And DatePart(Month,@InicioDeMes) = DatePart(Month,@FinalDeMes)

  If DatePart(WeekDay,@InicioDeMes) = 1
   Break
    Set @InicioDeMes = Dateadd(Day,1,@InicioDeMes)
   End

  Set @InicioDeMes = Dateadd(Day,1,@InicioDeMes)
  Set @Contador = @Contador + 1
End
Go

Observações:

  1. Talvez você possa estar na dúvida do motivo ao qual estou utilizando o comando Insert dentro do loop de inserção de dados em nosso calendário, na verdade se você analisar a cada volta realizada pelo loop será inserido um conjunto de valores novas em nossa tabela CalendarioMensal, com base, neste novo conjunto de valores teremos a capacidade de distribuir os valores de acordo com a sua respectiva coluna, ou melhor dia da semana.
  2. Estou utilizando o comando Update no Bloco de Código 4, como elemento subsequente dos valores inseridos através do comando Insert, fazendo uma rápida análise após o conjunto de valores correspondentes ao dia do mês, é estabelecido tratamento para cada valor de acordo com o dia da semana de forma única para, possibilitando assim identificar o valor inserido que posteriormente estará atrelado ao determinado dia da semana, desta forma é feita a atualização do dia na coluna ao qual ele corresponderia na calendário impresso.

Já estamos no final, o mais complicado e talvez difícil de ser feito foi realizado e espero que tudo tenha ocorrido corretamente que se relaciona a inserção dos dados na tabela CalendarioMensal, se você chegou até é porque conseguiu, então vamos avançar mais um passo e agora ver como nossos dados forma inseridos e serão apresentado em tela, para tal procedimento utilize o Bloco de Código 5 declarado na sequência:

— Bloco de Código 5 – Visualizando o Calendário Mensal e seus respectivos dias e semanas —

Select Semana As ‘Numero da Semana’,
            Segunda As ‘Segunda-Feira’,
            Terca As ‘Terça-Feira’,
            Quarta As ‘Quarta-Feira’,
            Quinta As ‘Quinta-Feira’,
            Sexta As ‘Sexta-Feira’,
            Sabado As ‘Sábado’,
            Domingo As ‘Domingo’
From CalendarioMensal
Go

Afim de ilustrar e comprovar o resultado apresentado pelo Bloco de Código 5, apresento a seguir a Figura 1 abaixo:


Figura 1 – Calendário Mensal correspondente ao mês de janeiro de 2018.

Show, show, sensacional é isso ai, conseguimos, chegamos ao final de mais um post da sessão Para que serve.


Referências

https://docs.microsoft.com/en-us/sql/t-sql/statements/insert-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/queries/update-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/functions/year-transact-sql

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar um dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2017/11/24/17-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/10/01/16-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/06/28/15-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/04/30/14-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/03/25/13-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/01/23/12-para-que-serve/

Conclusão

Como sempre a Microsoft e toda sua equipe nos surpreende com sua capacidade de trabalho, fortalecendo cada vez mais o Microsoft SQL Server não somente com um SGBD ou ferramenta de banco de dados, mas sim um ambiente completo para qualquer tipo de análise, desenvolvimento e administração que esteja relacionada com dados.

Através da diversidade de recursos e funcionalidades existentes no Microsoft SQL Server temos a capacidade de criar e manipular diversos tipos de objetos existentes no mundo real e que fazem parte do dia-a-dia das pessoas, e neste post você pode mais uma vez comprovar que isso é possível ser implementado, como visto aqui a criação e inserção de valores que representam a estrutura básica de um calendário impresso.

Este é o fantástico Microsoft SQL Server, surpreendente até nas funcionalidades e recursos mais básicos, produto mais do que bão e igual não existe so…..

Agradecimentos

Mais uma vez obrigado por sua ilustre visita, sinto-me honrado com sua presença, espero que este conteúdo possa lhe ajudar e ser útil em suas atividades profissionais e acadêmicas.

Quero também aproveitar para me despedir de vocês neste ano de 2017 e dizer que nos encontramos em breve, mas breve mesmo pois 2018 já esta batendo a porta.

Um forte abraço, até o próximo post da sessão Para que serve…..

Valeu.

Short Scripts – Dezembro 2017


Hello World, muito, mas muito bom dia….

Mais um sábado começando, justamente hoje que excepcionalmente eu não vou trabalhar e deveria estar dormindo estou aqui aproveitando um pouco do meu tempo para me dedicar a outra enorme paixão, meu blog e meu seguidores que estão me ajudando desde o começando deste ano a aumentar de forma considerável a audiência dos meus posts e sessões aqui compartilhadas.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, estou compartilhando a minha feita a exatos três meses no final do último post da sessão Short Scripts, hoje publicando mais um conjunto de scripts adicionados a minha biblioteca particular de códigos e exemplos nos últimos meses.

O post de hoje

Como de costume selecionei os principais scripts armazenados recentemente na minha biblioteca de códigos, que apresentam os seguintes assuntos:

  • Armazenamento de arquivos;
  • Construção de Frases;
  • Conversão de caracteres;
  • Data Type Money;
  • Excel;
  • Grant All Permissions;
  • Operador Cube;
  • Operador Rollup;
  • Select Recursivo;
  • Sequência Numérica;
  • Views;
  • XP_DirTree;
  • XML Path.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Dezembro 2017. Vale ressaltar que todos os scripts publicados nesta sessão foram devidamente testados, mas isso não significa que você pode fazer uso dos mesmo em seu ambiente de produção, vale sim todo cuidado possível para evitar maiores problemas.

Fique a vontade para compartilhar, comentar e melhorar cada um destes códigos.

Short Scripts

— Short Script 1  – Armazenando arquivos do Excel diretamente no SQL Server —
Set Nocount On
Go

Create Table FileList
(id int identity(1,1) primary key clustered,
FileName varchar(max))
Go

Create Table #TempTable
(id int identity(1,1) primary key clustered,
FileName varchar(max),
FileDepth int,
FileID int)
Go

Create Table dbo.TestBlob
(tbId int IDENTITY(1,1) NOT NULL,
tbName varchar (50) NULL,
tbDesc varchar (100) NULL,
tbBin varbinary (max) NULL)
Go

Insert Into #TempTable
EXEC master.sys.xp_dirtree ‘E:\ExcelOutput’,0,1;
Go

Select * from #TempTable
Go

Declare @I int=0, @FileName varchar(max), @Count int

Select * into #TempFileList from FileList
Set @Count=(Select count(*) from #TempFileList)

Declare @SQLText nvarchar(max)
While (@i<@Count)
 Begin

Set @FileName=(select top 1 FileName from #TempFileList)
  Set @SQLText=’Insert TestBlob(tbName, tbDesc, tbBin) Select ”’+@FileName+”’,”Files”,
  BulkColumn from Openrowset( Bulk ”’+@FileName+”’, Single_Blob) as tb’

  Print @SQLText
  Delete from #TempFileList where FileName=@FileName
  Set @I=@I+1
 End

Select tbID as ID,
tbName as ‘File Name’,
tbBin as ‘Converted file’
from TestBlob
Go

Drop Table #TempFileList
Go

— Short Script 2  – Convertendo caracteres diretamente para o formato e data type Money —
SELECT ‘1,,,,,,’+$0
Go

— Short Script 3  – Criando uma frase através de um Select Recursivo —
Create Table myWords
(RowID Int,
Word Varchar(20))
Go

Insert Into myWords Values(1, ‘This’),(2, ‘is’),(3, ‘an’),(4, ‘interesting’),
(5,’table’)

Declare @Sentence as varchar(8000)
SET @Sentence = ”

SELECT @Sentence = @Sentence + word + ‘ ‘
FROM myWords
ORDER BY RowID

PRINT @Sentence
Go

— Short Script 4  – Utilizando XML Path para gerar uma sequência numérica —
Declare @MyTable Table
(MyID Int)

Insert Into @MyTable Values(1),(2),(3),(4),(5)
Go

— Execução 1 —
Select MyID as “text()”, ‘;’ as “text()” from @MyTable for xml path(”)
Go

— Execução 2 —
Select MyID + ‘;’ as “text()” from @MyTable for xml path(”)
Go

— Short Script 5  – Atribuindo Grant All para todas tabelas em um Banco de Dados —

USE MyDatabase
Go

If EXISTS (Select [name] FROM master..sysdatabases WHERE [name] = ‘MyDatabase’)
Begin

Print ‘Updating Permissions for MyDatabase’
Print ‘ ‘

Declare @tablename varchar(255), @tablename_header varchar(255)

Declare tnames_cursor CURSOR FOR
Select name FROM MyDatabase..sysobjects
WHERE type = ‘U’

Open tnames_cursor
Fetch Next From tnames_cursor INTO @tablename

While (@@Fetch_status <> -1)
Begin

If (@@Fetch_status <> -2)
Begin
Select @tablename_header = ‘Updating ‘ + ‘MyDatabase..’ + RTrim(UPPER(@tablename) )
Print @tablename_header
Exec (‘Grant All on ‘ + @tablename +’ to shanewiso’)
End

Fetch Next From tnames_cursor INTO @tablename
End

Deallocate tnames_cursor
End
Go

— Short Script 6  – Diferença entre os operadores Rollup e Cube —
Create Table Funcionarios
(Codigo Int Primary Key,
Nome VarChar(50) Not Null,
Sexo VarChar(10) Not Null,
Salario Int Not Null,
Departamento VarChar(50) Not Null)
Go

Insert Into Funcionarios
Values
(1, ‘David’, ‘Masculino’, 5000, ‘Sales’),
(2, ‘Jim’, ‘Feminino’, 6000, ‘HR’),
(3, ‘Kate’, ‘Feminino’, 7500, ‘IT’),
(4, ‘Will’, ‘Masculino’, 6500, ‘Marketing’),
(5, ‘Shane’, ‘Feminino’, 5500, ‘Finance’),
(6, ‘Shed’, ‘Masculino’, 8000, ‘Sales’),
(7, ‘Vik’, ‘Masculino’, 7200, ‘HR’),
(8, ‘Vince’, ‘Feminino’, 6600, ‘IT’),
(9, ‘Jane’, ‘Feminino’, 5400, ‘Marketing’),
(10, ‘Laura’, ‘Feminino’, 6300, ‘Finance’),
(11, ‘Mac’, ‘Masculino’, 5700, ‘Sales’),
(12, ‘Pat’, ‘Masculino’, 7000, ‘HR’),
(13, ‘Julie’, ‘Feminino’, 7100, ‘IT’),
(14, ‘Elice’, ‘Feminino’, 6800,’Marketing’),
(15, ‘Wayne’, ‘Masculino’, 5000, ‘Finance’)
Go

— Agrupamento simples através de Group By através da coluna Departamento —
Select Departamento,
Sum(Salario) As Salario_Sum
From Funcionarios
Group By Departamento
Go

— Utilizando operador Rollup para gerar totais e subtotais com base na coluna Departamento —
Select Coalesce (Departamento, ‘Departamentos’) As Departamento,
Sum(Salario) As Salario_Sum
From Funcionarios
Group By Rollup (Departamento)
Go

— Procurando subtotais através do operador Rollup para colunas Departamento e Sexo —
Select Coalesce (Departamento, ‘Departamentos’) As Departamento,
Coalesce (Sexo,’Sexos’) As Sexo,
Sum(Salario) As Salario_Sum
From Funcionarios
Group By Rollup (Departamento, Sexo)
Go

— Utilizando o Operador Cube para gerar todas as possíveis combinações de agrupamentos de dados através das colunas Departamento e Sexo —
Select Coalesce (Departamento, ‘Departamentos’) As Departamento,
Coalesce (Sexo,’Sexos’) As Sexo,
Sum(Salario) As Salario_Sum
From Funcionarios
Group By Cube (Departamento, Sexo)
Go

— Short Script 7  – Identificando a relação de colunas utilizadas em uma view —
— Exemplo 1: Utilizando Information_Schema —

SELECT * FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS UsedColumns
WHERE UsedColumns.VIEW_NAME=’NameofView’
Go

— Exemplo 2: Utilizando DMVs —
SELECT
v.name AS ViewName,
c.name AS ColumnName,
columnTypes.name AS DataType,
aliases.name AS Alias
FROM sys.views v INNER JOIN sys.sql_dependencies d
ON d.object_id = v.object_id
INNER JOIN .sys.objects t
ON t.object_id = d.referenced_major_id
INNER JOIN sys.columns c
ON c.object_id = d.referenced_major_id
INNER JOIN sys.types AS columnTypes
ON c.user_type_id=columnTypes.user_type_id
AND c.column_id = d.referenced_minor_id
INNER JOIN sys.columns AS aliases
On c.column_id=aliases.column_id
AND aliases.object_id = object_id(‘[SchemaName].[ViewName]’)
WHERE v.name = ‘ViewName’;
Go

Show, missão cumprida! Mais uma relação de short scripts acaba de ser compartilhada, mesmo sendo denominados short entre aspas “pequenos”, posso garantir que todos estes exemplos são de grande importância, apresentam um valor e conhecimento do mais alto nível.


Chegamos ao final de mais um Short Scripts, espero que este material possa lhe ajudar, ilustrando o uso de alguns recursos e funcionalidades do Microsoft SQL Server.

Acredito que você tenha observado que estes códigos são conhecidos em meu blog, todos estão relacionados aos posts dedicados ao Microsoft SQL Server publicados no decorrer dos últimos anos.

Boa parte deste material é fruto de um trabalho dedicado exclusivamente a colaboração com a comunidade, visando sempre encontrar algo que possa ser a solução de um determinado problema, bem como, a demonstração de como se pode fazer uso de um determinado recurso.

Links

Caso você queira acessar os últimos posts desta sessão, não perca tempo acesse os links listados abaixo:

Agradecimento

Obrigado mais uma vez por sua visita, fico honrado com sua ilustre presença ao meu blog, desejo e espero que você possa ter encontrado algo que lhe ajudou.

Volte sempre, nos encontraremos mais uma vez na sessão Short Scripts no post do mês de fevereiro de 2018.

Um forte abraço, feliz natal e próspero ano novo.

#17 – Para que serve


Olá você, boa noite.

Tudo bem? Este é mais um post da sessão Para que serve, plena sexta – feira, enquanto meus alunos da Fatec São Roque estão quebrando a cabeça e gastando um pouco dos neurônios na resolução de exercícios, estou aqui para compartilhar um pouco do conhecimento adquirido nos alguns dias.

Quando eu falei sobre conhecimento adquirido, estou me referindo a algumas novidades adicionadas na nova versão do Microsoft SQL Server, neste caso mais especificamente a versão 2017. E ai você já realizou o download? Espero que a resposta seja positiva e você já esteja utilizando, pois caso contrário o post de hoje talvez não seja a solução da dúvida ou problema que você esta esperando.

Mas antes de falar do post, vamos destacar um pouco sobre o Microsoft SQL Server 2017. Acredito que você deva saber que no último mês de outubro, a Microsoft realizou mais um lançamento de uma nova versão do Microsoft SQL Server, estou me referindo a versão 2017. Por acaso você estão utilizando esta nova versão? Caso ainda não tenha feito, aproveite e faça agora mesmo acessando o link: https://www.microsoft.com/en-us/sql-server/sql-server-2017.

Se você, assim como eu realizou o download no mesmo dia do lançamento, ou seja, dia 02/10, pode ter um certo tempo para notar que a cada nova versão, o produto esta evoluindo, tanto no seu processo de instalação que realmente é fantástico e muito prático, como também, na quantidade de recursos, funcionalidades e componentes internos apresentados a partir desta da versão 2017.

Voltando para o post de hoje, como de costume a cada nova versão a Microsoft em conjunto com o seu time de engenheiros e desenvolvedores tem o hábito de adicionar um conjunto novo de funcionalidades e recursos, dentre eles alguns voltados especificamente para a área de desenvolvimento, no caso de comandos, stored procedures e functions adicionadas a grande linguagem Transact-SQL.

Logicamente na versão 2017 isso não seria diferente, e justamente pensando neste tipo de oportunidade para aquisição de conhecimento que o post de hoje será dedicado a duas novas funções adicionadas a partir desta versão sendo elas: Concat_WS e Translate.

E ai por acaso você já as conhece, espero que não, mas caso já tenha encontrado alguma informação ou até mesmo tenha feito uso, fique a vontade para contribuir com este post deixando seu comentário.

Seguindo em frente, chegou a hora de conhecer um pouco mais sobre estas novas funções, desta forma, seja bem vindo ao #17 – Para que serve – Novas String Functions Concat_WS e Translate adicionadas ao Microsoft SQL Server 2017.

Introdução

Em diversos momentos trabalhando com diversos dados armazenados em nossas tabelas temos a necessidade de realizar a concatenação entre eles, ou seja, estabelecer uma possível forma de união destes diversos valores e apresentar de uma única coluna ou até mesmo linha de registro.

Procedimento que até a versão 2012 do Microsoft SQL Server nos exigia um pouco de linhas de código para realizar esta atividade, sendo que, a mesma agora na versão 2o17 tornou-se ainda mais simples e fácil através da nova string function Concat_WS.

Você pode estar pensando, mas qual o motivo do tipo de engenheiros do SQL Server em adicionar uma função similar a Concat, na verdade não existe um motivo, o que existe e posso dizer é que a Concat e a Concat_WS podem ser consideradas irmãs ou até mesmo funções que se complementam.

Neste sentido o WS pode ser reconhecido como o argumento (concatenate with separator) separador, aquele caracterer que será utilizado para separar um valor string do outro mais ao mesmo tempo estará fazendo parte do conjunto de valores que serão concatenados.

Para que você possa entender e conhecer melhor a função Concat_WS, vou apresentar alguns exemplos:

— Exemplo 1 – Obtendo informações sobre as tabelas, utilizando o hífen como separador —
SELECT CONCAT_WS( ‘ – ‘, name, OBJECT_ID, create_date, modify_date) AS TablesInfo
FROM sys.tables
Go

Após a execução do Exemplo 1, você deverá obter um resultado similar conforme apresenta a Figura 1 abaixo:


Figura 1 – Dados concatenados e separados pelo sinal de hífen.

— Exemplo 2 – Concatenando caracteres utilizando o sinal de dois pontos como separador —
Select CONCAT_WS(‘ :: ‘, ‘Pedro Antonio Galvão Junior’, ‘Idade:37’, ‘MVP desde 2007’) As Info
Go

Após a execução do Exemplo 2, você deverá obter um resultado similar conforme apresenta a Figura 2 abaixo:


Figura 2 – Dados concatenados e separados pelo sinal de dois pontos.

Observação: Note que nos dois exemplos apresentados acima o primeiro argumento ou parâmetro obrigatório que deve ser especificado na função Concat_WS é justamente o elemento separador, o qual vai estar envolvido diretamente entre cada conjunto de valores informados sequencialmente na função.

Dando continuidade, vamos conhecer a função Translate, inicialmente fazendo uma rápida analogia ao seu nome parece que esta nova função seria algo similar a um tradutor de texto, na verdade ela tem um papel entre aspas próximo em relação a tradução de um valor ou sentença de valores string, mas dizer que ela realiza a tradução não é o entendimento correto.

Na verdade esta função realiza em tempo de execução retorna uma nova sentença de valores string com base no conjunto de argumentos declarados em sua sintaxe, sendo que obrigatoriamente o primeiro argumento representa a sentença de valores que deverá ser utilizada, para posteriormente servir como base para nova sentença que será resultando da “tradução”.

Vamos então conhecer um pouco mais sobre esta função, através dos exemplos apresentados a seguir:

— Exemplo 1 – Equação de 2º Grau — Substituindo a letra x pelo número 4 —Select ‘x² – 10x + 24 = 0’ As ‘Antes’
Go

Select Translate(‘x² – 10x + 24 = 0’, ‘x’, ‘4’) As ‘Depois’
Go

Após a execução do Exemplo 1, você deverá obter um resultado similar conforme apresenta a Figura 3 abaixo:


Figura 3 – Uso da função Translate aplicada em uma equação de segundo grau.

— Exemplo 2 – Método de Bhaskara – Substituindo as letras A e C pelos valores 1 e 8 informados respectivamente com grupos de valores em cada argumento —
Select N’∆ = b² – 4 * a * c’ As ‘Antes’

Go

Select Translate(N’∆ = b² – 4 * a * c’ , ‘ac’, ’18’) As ‘Depois’
Go

Após a execução do Exemplo 2, você deverá obter um resultado similar conforme apresenta a Figura 4 abaixo:


Figura 4 – Uso da função Translate aplicada ao método de bhaskara.

Observação: Note que nos dois exemplos apresentados anteriormente argumento ou parâmetro obrigatório que deve ser especificado na função Translate corresponde ao valores ou sentença string, o qual será utilizada como elemento base para “tradução” e apresentação do novo conjunto de valores ou sentença após sua execução. 

Muito bem, desta forma, chegamos ao final de mais uma post da sessão Para que Serve….


Referências

https://technet.microsoft.com/pt-br/library/ms186862(v=sql.110).aspx

https://docs.microsoft.com/en-us/sql/t-sql/functions/concat-ws-transact-sql

https://docs.microsoft.com/pt-br/sql/t-sql/functions/translate-transact-sql

https://docs.microsoft.com/pt-br/sql/t-sql/functions/string-functions-transact-sql

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar um dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2017/10/01/16-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/06/28/15-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/04/30/14-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/03/25/13-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/01/23/12-para-que-serve/

Conclusão

Como sempre a Microsoft e toda sua equipe nos surpreende com sua capacidade de trabalho, fortalecendo cada vez mais o Microsoft SQL Server não somente com um SGBD ou ferramenta de banco de dados, mas sim um ambiente completo para qualquer tipo de análise, desenvolvimento e administração que esteja relacionada com dados.

Destacando as novas funções apresentadas neste post Concat_WS e Translate, atividades como concatenação de dados que já havia se tornada mais fácil a partir da versão 2o12, agora se tornou algum praticamente irrelevante no que diz respeito a complexidade.

Sem se esquecer da função Translate que através de um simples argumento nos permite “realizar uma possível tradução de caracteres” muito similar a antiga e útil função Replace, mas que trabalha de uma forma mais ágil independente da posição do caracter dentro do conjunto de valores apresentados.

Este é o fantástico Microsoft SQL Server, eita produto bão so……

Agradecimentos

Chegou a hora do descanso, se preparar para um novo dia que daqui a pouco estará raiando, espero que você possa fazer o mesmo, aproveitar o seu dia ainda mais, tentar viver um pouco sem se preocupar com os problemas.

Mais uma vez obrigado por sua ilustre visita, sinto-me honrado com sua presença, espero que este conteúdo possa lhe ajudar e ser útil em suas atividades profissionais e acadêmicas.

Um forte abraço, até o próximo post da sessão Para que serve…..

Valeu.

 

 

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