Se o seu acionador usa UPDATE (), provavelmente está quebrado.


Na postagem do blog de ontem sobre o uso de gatilhos para substituir colunas computadas, um debate animado ocorreu nos comentários. Um leitor postou um gatilho que eu deveria usar e eu apontei que o gatilho dele tinha um bug – e muitos usuários responderam dizendo: “Que bug?”

Vou demonstrar.

Pegaremos a tabela Users no banco de dados Stack Overflow e diremos que a empresa deseja implementar uma regra. Se alguém atualizar sua localização para um novo local, iremos redefinir sua reputação de volta para 0 pontos. read more

Iniciando sua jornada com o Microsoft Azure Data Factory


Trabalhando como um Azure Data Engineer, você é responsável por projetar e implementar soluções de plataforma de dados Azure nas quais você precisa escolher o melhor método para ingerir dados estruturados, semiestruturados e não estruturados que são gerados de várias fontes de dados, a fim de serem processados em lotes ou em tempo real pelos aplicativos e armazenados ou visualizados de acordo com os requisitos do projeto.

Neste artigo, examinaremos o serviço Microsoft Azure Data Factory, que pode ser usado para ingerir, copiar e transformar dados gerados de várias fontes de dados. read more

As 4 apresentações das quais mais me orgulho e o que as inspirou


Eu estava pensando nas apresentações de que mais me orgulho ao longo dos anos. Escrevi e fiz * muitas * coisas ao longo do tempo, mas aqui estão algumas das apresentações públicas gratuitas das quais mais me orgulho e as histórias de como elas surgiram.

Nº 4: Assistir às consultas de Brent Tune (2014)

Este show foi inspirado na Discovery Network. Adoro ver as pessoas simplesmente fazerem o seu trabalho. Deadliest Catch. Trabalhos sujos. Maine Cabin Masters.

Pensei: “Posso criar uma sessão em que alguém apenas me observe trabalhar? Like a Dirty Jobs, mas para SQL Server? E quanto eu poderia ensiná-los no processo? ” read more

Usando gatilhos para substituir UDFs escalares em colunas computadas


Seu banco de dados está repleto de colunas computadas cuja definição inclui uma função escalar definida pelo usuário. Até e incluindo SQL Server 2019, que possui processamento de função escalar mais rápido, qualquer tabela que inclui uma função escalar faz com que todo o acesso a essa tabela seja de thread único. Nesse caso, um gatilho pode ser um ótimo substituto.

Não, espere, volte. Os gatilhos têm uma reputação muito ruim entre a comunidade de banco de dados porque:

  • Você pode acumular muito trabalho neles, levando a lentidões surpreendentes em escala
  • Você pode manter os bloqueios abertos por muito tempo enquanto trabalha em várias tabelas
  • A solução de problemas pode ser complicada, pois os autores raramente registram erros gerados nos gatilhos
  • Eles quase sempre têm um bug envolvendo processamento de vários registros

Mas existem alguns lugares em que um gatilho é, na verdade, o menos pior ajuste, e este é um deles. Para mostrar o problema, pegarei o banco de dados Stack Overflow de tamanho médio de 50 GB e farei uma contagem simples do número de linhas: read more

Azure SQL Database vs. SQL Server on Azure VMs



The recent trend proves that the adoption of the Cloud has much greater significance and importance in modernizing
IT. If you are working on migrating the on-premises SQL Server to Microsoft Azure cloud, you need to have a better
understanding of the key differences between Azure SQL databases and SQL Server on Azure VMs and options that work
best for you.


One of the key decision points for organization and Azure users is whether to deploy Azure SQL Database or SQL
Server on Azure VMs for their relational database needs. Azure SQL Databases and SQL Server on Azure VM are
optimized for different requirements. Let us deep dive further to understand the key differences. read more

Analisar valores padrão de parâmetros usando PowerShell – Parte 3


ParamParser no GitHub https://github.com/AaronBertrand/ParamParserNa parte 1 e na parte 2 desta série, apresentei o ParamParser: um módulo do PowerShell que ajuda a analisar informações de parâmetros – incluindo valores padrão – de procedimentos armazenados e funções definidas pelo usuário, porque o SQL Server não fará isso por nós.

Nas primeiras iterações do código, eu simplesmente tinha um arquivo .ps1 que permitia que você colasse um ou mais corpos de módulo em um $procedure variável. Havia muita coisa faltando nessas primeiras versões, mas abordamos várias coisas até agora:

  • Agora é um módulo adequado – você pode correr Import-Module .ParamParser.psm1 e então ligue para o Get-ParsedParams função durante uma sessão (além dos outros benefícios que você obtém de um módulo). Esta não foi uma conversão trivial – parabéns novamente para Will White.
  • Suporte de função definida pelo usuário – Expliquei na parte 2 como os nomes das funções são mais difíceis de analisar do que os nomes dos procedimentos; o código agora lida com isso corretamente.
  • Automatizando ScriptDom.dll – não temos permissão para redistribuir este arquivo de chave, e porque você pode encontrar problemas se não o tiver (ou tiver uma versão desatualizada), Will criou init.ps1, que baixa e extrai automaticamente a versão mais recente (atualmente 150.4573.2) e a coloca na mesma pasta que os outros arquivos.
  • Fontes adicionais – você ainda pode passar um bloco de script bruto, se quiser, mas agora também pode usar várias instâncias e bancos de dados como fontes, fazer referência a um ou mais arquivos diretamente ou obter todos .sql arquivos de um ou mais diretórios. Vou mostrar alguns exemplos de sintaxe abaixo.
  • A saída indica a fonte – uma vez que você pode processar vários arquivos ou bancos de dados em uma chamada, e você pode ter vários objetos com o mesmo nome, incluindo a fonte ajuda a desambiguar. Não posso fazer muito se você tiver duas instâncias de CREATE PROCEDURE dbo.blat ... no mesmo arquivo ou script bruto, e a fonte nem mesmo é indicada se você usar -Script e passe em uma string.
  • Resultado aprimorado – você ainda pode despejar tudo no console, mas também pode usar Out-GridView para visualizar os resultados em formato de grade (aqui está um exemplo enfadonho de AdventureWorks2019) ou registrar as informações de parâmetro em um banco de dados para consumo em outro lugar.

Siga as instruções no leiame para fazer o download e configurar. Depois de clonar o repositório, execute .init.ps1 e depois Import-Module .ParamParser.psm1. Teste-o com um exemplo simples, como:

Get-ParsedParams -Script "CREATE PROCEDURE dbo.a @b int = 5 out AS PRINT 1;" -GridView

Resultado (clique para ampliar):

Analisar valores padrão de parâmetros usando PowerShell - Parte 3 8

No entanto, existem muitas outras combinações de parâmetros. O cabeçalho da ajuda mostra uma boa parte da sintaxe possível (e obrigado novamente a Will por muita limpeza incrível aqui):

Resultados:

Get-ParsedParams [-Script] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Janelas}] [<CommonParameters>]

Get-ParsedParams [-File] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Janelas}] [<CommonParameters>]

Get-ParsedParams [-Directory] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Janelas}] [<CommonParameters>]

Get-ParsedParams [-ServerInstance] [-Database] [[-AuthenticationMode] {SQL | Janelas}] [[-GridView]] [[-Console]] [[-LogToDatabase]] [[-LogToDBAuthenticationMode] {SQL | Janelas}] [<CommonParameters>]

Mais alguns exemplos

Para analisar todos os objetos em c:tempdb.sql:

Get-ParsedParams -File "C:tempdb.sql" -GridView

Para analisar todos os arquivos .sql em c:tempscripts (recursivo) e h:sql (também recursivo):

Get-ParsedParams -Directory "C:tempscripts", "H:sql" -GridView

Para analisar todos os objetos em msdb na instância nomeada local SQL2019 usando a autenticação do Windows:

Get-ParsedParams -ServerInstance ".SQL2019" -Database "msdb" -GridView

Para analisar todos os objetos em msdb, floob, e AdventureWorks2019 na instância nomeada local SQL2019 e serão solicitadas as credenciais de autenticação SQL:

Get-ParsedParams -ServerInstance ".SQL2019" -Database "msdb","floob","AdventureWorks" -AuthenticationMode "SQL" -GridView

Para analisar todos os objetos em msdb na instância nomeada local SQL2019 e passar credenciais de autenticação SQL:

$password = ConvertTo-SecureString -AsPlainText -Force -String "[email protected]" $credential = New-Object -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $password Get-ParsedParams -ServerInstance ".SQL2019" -Database "msdb" -AuthenticationMode "SQL" -SqlCredential $credential -GridView read more

Uma visão geral da função db_datareader


Neste artigo, vamos aprender sobre o db_datareader Função. É uma função fixa no nível do banco de dados. As funções de nível de banco de dados são um grupo de entidades de segurança usadas para gerenciar as permissões nos bancos de dados com mais eficiência. Existem dois tipos de funções no nível do banco de dados. Uma é uma função de nível de banco de dados predefinida e outra são funções de nível de banco de dados personalizadas. As funções personalizadas de nível de banco de dados podem ser criadas pelo administrador de banco de dados ou pelo membro do db_owner Função. read more

What is Oracle ASM to Azure IaaS?


There is a natural desire for us to make sense out of confusion, and Oracle is a topic that confuses many. One of the challenges of being known as a subject matter expert on a topic that isn’t common in the Microsoft space, is that you end up with people asking you to compare things that just aren’t the best candidates for comparison. It’s rare that I can’t take two or three features/products from Oracle and find a similar combination in Microsoft, but one of the areas not so straight forward is Oracle’s Automatic Storage Manager, (ASM). As Oracle on Azure is all Infrastructure as a Service, (IaaS) the conversation of ASM will undoubtedly come up in most database discussions, and odd comparisons will ensue. read more

Aplicar patches do SQL Server ou atualizações cumulativas em grupos de disponibilidade Always On do SQL Server


Neste 32nd artigo sobre a série Grupo de disponibilidade Always On do SQL Server, discutiremos o processo de aplicação de um service pack ou pacotes cumulativos para instâncias de réplica AG.

Uma breve visão geral dos patches do SQL Server

É uma prática recomendada aplicar a atualização regular ao SQL Server com o service pack (SP) ou os pacotes cumulativos (CU). Aqui está uma visão geral rápida das atualizações do SQL Server.

  • Pacote de serviço: Um service pack contém um único pacote de hotfixes e atualizações lançados anteriormente
  • Pacotes cumulativos (CU): Pacotes cumulativos (CU) são o hotfix, pequenas melhorias de recursos
  • Versão de distribuição geral (GDR): A Microsoft lança o lançamento GDR, e é especialmente relacionado à segurança do SQL Server

Até o SQL Server 2016, a Microsoft lança service packs regulares e atualizações cumulativas. Por exemplo, nas versões do SQL Server 2016, você vê as seguintes sequências. read more