{"id":1849,"date":"2025-07-22T10:17:55","date_gmt":"2025-07-22T13:17:55","guid":{"rendered":"https:\/\/thesqltimes.com\/blog\/?p=1849"},"modified":"2025-09-01T23:02:09","modified_gmt":"2025-09-02T02:02:09","slug":"cnpj-alfa-numerico-sqlserver","status":"publish","type":"post","link":"https:\/\/thesqltimes.com\/blog\/2025\/07\/22\/cnpj-alfa-numerico-sqlserver\/","title":{"rendered":"CNPJ Alfanum\u00e9rico: Como mudar no seu banco de dados SQL Server"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Muito \u00fatil!\" data-post-id=\"1849\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><\/div><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de Leitura:<\/span> <span class=\"rt-time\"> 11<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p>Daqui um ano, em Julho de 2026, um <a href=\"https:\/\/www.gov.br\/receitafederal\/pt-br\/acesso-a-informacao\/acoes-e-programas\/programas-e-atividades\/cnpj-alfanumerico\">novo formato de CNPJ vai entrar em vigor<\/a>: o CNPJ alfanum\u00e9rico! Agora, ele vai aceitar letras! At\u00e9 ent\u00e3o, era somente n\u00fameros.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"558\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-12-1024x558.png\" alt=\"\" class=\"wp-image-1887\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-12-1024x558.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-12-300x164.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-12-768x419.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-12.png 1126w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Fonte: <a href=\"https:\/\/www.gov.br\/receitafederal\/pt-br\/centrais-de-conteudo\/publicacoes\/apresentacoes\/outros-eventos\/cnpj-alfanumerico.pdf\">Receita Federal<\/a><\/figcaption><\/figure>\n\n\n\n<p>O total de caracteres n\u00e3o vai mudar: 14 (12 caracteres + 2 d\u00edgitos verificadores), mas o fato de poder incluir as letras mai\u00fasculas de A a Z em qualquer uma das 12 posi\u00e7\u00f5es iniciais, nos acende um alerta sobre como devemos preparar o banco para isso (se devemos!) e o que eu vou precisar me preocupar, especialmente falando de SQL Server, que \u00e9 o banco de dados que eu j\u00e1 trabalho h\u00e1 anos. Nesse post eu quero trazer algumas dicas e te preparar para os pontos que voc\u00ea deve pensar e come\u00e7ar a planejar a mudan\u00e7a, caso seu banco armazene esse dado.<\/p>\n\n\n\n<p><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>Lembre-se: A mudan\u00e7a no banco de dados \u00e9 uma parte do processo. Al\u00e9m do banco, aplica\u00e7\u00f5es podem precisar de mudan\u00e7a, pois podem realizar valida\u00e7\u00f5es e conter regras, ent\u00e3o, n\u00e3o basta apenas se preocupar com o banco. Esse \u00e9 um trabalho de equipe para que todo o neg\u00f3cio e processos da sua empresa consigam se adequar!<\/strong><\/mark><\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Planejamento Inicial<\/h2>\n\n\n\n<p>Do ponto de vista do banco de dados, e de maneira simplificada, a altera\u00e7\u00e3o do CNPJ \u00e9 basicamente mudar os tipos de dados para texto, se voc\u00ea usa n\u00famero, em outras palavras, \u00e9 mudar de int\/bigint para char\/varchar, mais ajustes de c\u00f3digos (o tipo das vari\u00e1veis, valida\u00e7\u00f5es, etc.). Apesar de parecer simples, mudar o tipo de dados pode ser uma das opera\u00e7\u00f5es mais complicadas de lidar em bancos relacionais, e especialmente no SQL Server!<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">MUITO IMPORTANTE: <\/mark><\/strong>Se seu banco j\u00e1 usa varchar para CNPJ, dificilmente voc\u00ea ter\u00e1 mais algo para ajustar, a n\u00e3o ser testar. Se precisar de um script que gere CNPJ alfanum\u00e9rico v\u00e1lido para testes, eu coloquei esse no meu repo GIT de SQL: <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Misc\/vw.GerarCNPJ-Alfa.sql\">sqlserver-lib\/Misc\/vw.GerarCNPJ-Alfa.sql at main \u00b7 rrg92\/sqlserver-lib<\/a>. E <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Misc\/fn.ValidarCNPJ-Alfa.sql\" title=\"\">este outro script, valida CNPJ alfanum\u00e9rico<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"407\" height=\"198\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-1.png\" alt=\"\" class=\"wp-image-1851\" style=\"width:456px;height:auto\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-1.png 407w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-1-300x146.png 300w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/a><figcaption class=\"wp-element-caption\">Voc\u00ea pode gerar v\u00e1rios CNPJ fazendo um CROSS JOIN com uma tabela que contenha v\u00e1rias linhas<\/figcaption><\/figure><\/div>\n\n\n<p>No SQL Server, h\u00e1 v\u00e1rios lugares em que voc\u00ea pode precisar mexer no tipo de dados:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O mais \u00f3bvio \u00e9 no tipo de dados das colunas das tabelas. Muita gente usa o tipo de dado como n\u00famero, e isso pode requerer uma aten\u00e7\u00e3o especial.<\/li>\n\n\n\n<li>Al\u00e9m das colunas, se voc\u00ea tem procedures\/fun\u00e7\u00f5es\/triggers (os chamados &#8220;m\u00f3dulos&#8221; no SQL) que executam regras, pode precisar se preocupar com o tipo de dados dos par\u00e2metros desses m\u00f3dulos que recebem um CNPJ e prov\u00e1veis declara\u00e7\u00f5es de vari\u00e1veis que ir\u00e3o receber esse valor.<\/li>\n\n\n\n<li>Al\u00e9m dos m\u00f3dulos e tabelas, as views tamb\u00e9m podem precisar de alguma aten\u00e7\u00e3o, visto que, se voc\u00ea muda o tipo de dados da coluna, ou mesmo coloca alguma express\u00e3o, voc\u00ea precisa atualizar a view<\/li>\n<\/ul>\n\n\n\n<p class=\"has-text-align-left\">Antes de voc\u00ea iniciar a altera\u00e7\u00e3o de qualquer coisa, o primeiro passo \u00e9 levantar o qu\u00ea e onde voc\u00ea vai precisar mexer. No caso de tabelas, voc\u00ea pode come\u00e7ar procurando pelas colunas que possuem o texto <em>cnpj <\/em>no nome e filtrando essas em que o tipo de dados n\u00e3o \u00e9 um texto. <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Tables\/Colunas\/ProcurarColunaPorNome.sql\">Esse script<\/a> te ajuda a encontrar colunas em todos os bancos que possuem um determinado trecho. Adapte ele conforme necess\u00e1rio.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"946\" height=\"576\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-10.png\" alt=\"\" class=\"wp-image-1860\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-10.png 946w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-10-300x183.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-10-768x468.png 768w\" sizes=\"auto, (max-width: 946px) 100vw, 946px\" \/><\/a><figcaption class=\"wp-element-caption\">Encontrando tabelas e views que possuem colunas com  &#8220;cnpj&#8221; no nome<\/figcaption><\/figure><\/div>\n\n\n<p class=\"has-text-align-left\">Obviamente, se a coluna n\u00e3o possui nada de &#8220;cnpj&#8221; no nome, este script n\u00e3o ir\u00e1 traz\u00ea-la. Revise essa lista, investigue se realmente essas tabelas e views precisam ser mexidas. Para alterar a tabela, h\u00e1 algumas estrat\u00e9gias e preocupa\u00e7\u00f5es, que eu vou falar logo abaixo. Repare no exemplo acima que, apesar de algumas colunas estarem com tamanho acima do que \u00e9 necess\u00e1rio, nenhuma delas vai precisar de altera\u00e7\u00e3o, visto que todas j\u00e1 conseguem receber um CNPJ com letras.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-default is-layout-flow wp-block-quote-is-layout-flow\" style=\"font-size:17px\">\n<p class=\"has-text-align-left\">&#8220;Ah Rodrigo, mas o tipo t\u00e1 errado, vai cagar o plano, etc.&#8221; Sim, mas aqui n\u00e3o estamos falando de arrumar sua modelagem, e sim adaptar para receber o novo formato do CNPJ. Voc\u00ea vai ver que qualquer altera\u00e7\u00e3o \u00e9 um pre\u00e7o muito alto, dependendo da tabela, ent\u00e3o, a menos que o benef\u00edcio desse pre\u00e7o seja realmente valioso para voc\u00ea, eu n\u00e3o recomendaria mexer com o que n\u00e3o \u00e9 necess\u00e1rio agora.<\/p>\n<\/blockquote>\n\n\n\n<p>Uma vez que voc\u00ea encontrou as tabelas, \u00e9 necess\u00e1rio encontrar tamb\u00e9m os c\u00f3digos que possuem algo de CNPJ. <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Modulos\/ProcuraEmTodosModulos.sql\">Este outro script<\/a> te ajuda nisso, procurando em todos os bancos por objetos que contenham um trecho de texto. Voc\u00ea pode come\u00e7ar procurando pelo texto <em>cnpj<\/em>, e isso vai te trazer todos os m\u00f3dulos e views que cont\u00e9m esse trecho (at\u00e9 nos coment\u00e1rios). Revise cada um deles para determinar se precisa ou n\u00e3o de ajustes. E, lembre-se, se \u00e9 usado outros nomes ao inv\u00e9s de &#8220;cnpj&#8221;, ai ele n\u00e3o vai trazer no script e voc\u00ea pode precisar ajustar para os nomes comuns que usa.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"805\" height=\"645\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-9.png\" alt=\"\" class=\"wp-image-1859\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-9.png 805w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-9-300x240.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-9-768x615.png 768w\" sizes=\"auto, (max-width: 805px) 100vw, 805px\" \/><\/a><figcaption class=\"wp-element-caption\">Exemplo de objetos em que o script encontrou a string CNPJ<\/figcaption><\/figure><\/div>\n\n\n<p>Uma vez que voc\u00ea tem a lista de objetos que precisam ser alterados, e o qu\u00ea nelas voc\u00ea vai precisar alterar, ent\u00e3o voc\u00ea deve elencar a ordem em que vai alterando. Geralmente, as tabelas s\u00e3o os \u00faltimos que ir\u00e1 fazer, mas isso n\u00e3o \u00e9 uma regra, depende do caso.  Ajustar o c\u00f3digo tende a ser mais f\u00e1cil de garantir a compatibilidade. Por exemplo, suponha que voc\u00ea tem uma procedure que receba o par\u00e2metro @cnpj, que, atualmente, \u00e9 um bigint e voc\u00ea vai mudar pra char.  Ap\u00f3s a mudan\u00e7a, voc\u00ea pode continuar passando o inteiro normalmente (a menos que use algum framework que valide o tipo do par\u00e2metro da procedure).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-2-1024x556.png\" alt=\"\" class=\"wp-image-1852\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-2-1024x556.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-2-300x163.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-2-768x417.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-2.png 1044w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>A altera\u00e7\u00e3o de c\u00f3digo \u00e9 algo bem bra\u00e7al. Vai precisar de algu\u00e9m que entenda um pouco de T-SQL e at\u00e9 do seu neg\u00f3cio para ir ajustando o que for preciso. N\u00e3o \u00e9 somente trocar o tipo de dados, \u00e9 ler o c\u00f3digo, entender o que se faz e avaliar se \u00e9 apenas uma troca simples ou se precisa ajustar algo na regra, uma vez que agora passar\u00e1 a ter LETRAS ali no meio.<\/p>\n\n\n\n<p>Se voc\u00ea quiser, pode usar algum LLM\/IA para te ajudar nisso, mas, de verdade, quer um conselho? Evita isso, pois LLMs podem mudar uma besteira no seu c\u00f3digo e te dar mais dor de cabe\u00e7a. Eu tenho algumas ideias de como um LLM poderia ajudar, mas todas elas envolvem um esfor\u00e7o inicial alto, que eu nem testei ainda, ent\u00e3o, esfor\u00e7o por esfor\u00e7o, eu optaria agora pelo simples e garantido, pois se voc\u00ea precisa de uma altera\u00e7\u00e3o dessa magnitude, menos \u00e9 mais aqui.<\/p>\n\n\n\n<p>Se voc\u00ea chegou at\u00e9 aqui e revisou todas as suas procs e tabelas e viu que j\u00e1 est\u00e1 tudo trabalhando bem com texto, ent\u00e3o, muito bem! Sua miss\u00e3o agora \u00e9 testar e ajudar seu time de dev no que precisarem para garantir que os sistemas v\u00e3o operar tranquilamente.<\/p>\n\n\n\n<p>Agora, se voc\u00ea achou algo que trata o CNPJ como inteiro, siga lendo o artigo para saber no que voc\u00ea tem que pensar antes de alterar qualquer coisa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estrat\u00e9gias e Impactos nas Tabelas<\/h2>\n\n\n\n<p>Mexer nas tabelas pode ser o ponto mais cr\u00edtico e trabalhoso, principalmente por conta da concorr\u00eancia. Se voc\u00ea tem tabelas com CNPJ que tem concorr\u00eancia alta (usada por muitos usu\u00e1rios ao mesmo tempo a todo momento), ent\u00e3o, voc\u00ea vai precisar planejar janelas, onde pode ter algum tempo de indisponibilidade. O tempo de indisponibilidade, vai depender da forma como voc\u00ea escolheu fazer as altera\u00e7\u00f5es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tabelas grandes x Tabelas Pequenas<\/h3>\n\n\n\n<p>Para tabelas pequenas, sua vida vai ser mais f\u00e1cil. J\u00e1 para as grandes, voc\u00ea pode precisar de adotar estrat\u00e9gias para minimizar o tempo de indisponibilidade. <\/p>\n\n\n\n<p>O que eu considero uma tabela pequena? Depende muito do seu ambiente. Aqui \u00e9 como eu costumo avaliar: Se seu SQL ainda roda num celeron com disco mec\u00e2nico, 10 mil linhas podem levar um bom tempo para ser alterado. J\u00e1 em um core i9 com SSD, isso provavelmente vai ser feito em milissegundos. Portanto, essa m\u00e9trica do que \u00e9 grande ou pequeno \u00e9 bem relativo ao tempo que leva para mexer em X linhas. Como voc\u00ea descobre? Teste. Restaure um banco em ambiente de testes e fa\u00e7a as altera\u00e7\u00f5es, mensure os tempos. Com isso voc\u00ea ter\u00e1 uma no\u00e7\u00e3o. Seu objetivo \u00e9 minimizar o tempo que demora para sua tabela estar pronta pra suas apps usadas, ent\u00e3o, voc\u00ea vai ter que escolher a estrat\u00e9gia que coloque esse tempo em algo aceit\u00e1vel pro seu neg\u00f3cio.<\/p>\n\n\n\n<p>Al\u00e9m dos recursos, a concorr\u00eancia \u00e9 muito importante aqui. Uma tabela de 1MB, com umas 1000 empresas (1 por linha), mas que \u00e9 usada 100x por segundo de uma aplica\u00e7\u00e3o cr\u00edtica, que pode gerar multas altas baseado em tempo de resposta muito baixos (ex. &gt; 500ms), \u00e9 complicado parar ela mesmo que por alguns segundinhos&#8230;  O seu diretor provavelmente n\u00e3o vai gostar de saber que voc\u00ea causou um lock de 5 segundos sem ter avisado ou planejado&#8230; <\/p>\n\n\n\n<p>Ent\u00e3o, tenha em mente que quando eu digo tabela pequena, eu estou falando de uma tabela que voc\u00ea pode mexer nela na janela que o seu neg\u00f3cio permite. E a tabela grande \u00e9 aquela que voc\u00ea n\u00e3o consegue mexer em uma \u00fanica janela sem afetar o neg\u00f3cio de alguma forma.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ALTER TABLE: Simples, chato e perigoso<\/h3>\n\n\n\n<p>A op\u00e7\u00e3o mais simples e que funciona muito bem para tabelas pequenas e com baixa concorr\u00eancia, \u00e9 um simples ALTER TABLE:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"613\" height=\"152\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-4.png\" alt=\"\" class=\"wp-image-1854\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-4.png 613w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-4-300x74.png 300w\" sizes=\"auto, (max-width: 613px) 100vw, 613px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL: ALTER TABLE Empresas ALTER COLUMN cnpj char(14)<\/figcaption><\/figure><\/div>\n\n\n<p>Apesar de simples, esse comando \u00e9 muito perigoso e chato. Perigoso porque \u00e9 o mesmo efeito de um UPDATE em cada linha, j\u00e1 que o SQL tem que trocar o bin\u00e1rio da coluna que agora \u00e9 diferente, devido ao novo tipo. Chato porque se voc\u00ea tiver \u00edndices, constraints, colunas computadas (muito chato esse), foreing keys, etc. que referenciam essa coluna, voc\u00ea vai precisar matar tudo e depois recriar.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"210\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-3.png\" alt=\"\" class=\"wp-image-1853\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-3.png 740w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-3-300x85.png 300w\" sizes=\"auto, (max-width: 740px) 100vw, 740px\" \/><\/a><figcaption class=\"wp-element-caption\">Exemplo do erro que voc\u00ea toma na cara quando a coluna tem depend\u00eancias:<br>Msg 5074, Level 16, State 1, Line 2  <br>The index &#8216;ixCnpj&#8217; is dependent on column &#8216;cnpj&#8217;.  <br>Msg 4922, Level 16, State 9, Line 2  <br>ALTER TABLE ALTER COLUMN cnpj failed because one or more objects access this column.<br> <\/figcaption><\/figure><\/div>\n\n\n<p>Mas, \u00e9 uma op\u00e7\u00e3o que funciona muito bem para estes cen\u00e1rios simples (tabela pequena, baixa concorr\u00eancia, sem depend\u00eancias complexas). Ainda sim, mesmo com baixa concorr\u00eancia e pequena, se algu\u00e9m tentar acessar a tabela enquanto ela estiver sendo alterada, ele vai tomar lock, mas, em teoria, vai ser r\u00e1pido. Voc\u00ea tamb\u00e9m pode tomar lock, se outra pessoa tiver usando. Por isso, \u00e9 bem importante ter uma janela onde ou voc\u00ea vai ser a \u00fanica pessoa usando o banco, ou onde pode restringir o acesso a essa tabela, atrav\u00e9s de kill ou permiss\u00f5es (dando DENY expl\u00edcito na tabela).<\/p>\n\n\n\n<p>Note que ap\u00f3s a convers\u00e3o de inteiro para char, voc\u00ea deve tratar os casos de CNPJ que possuem o zero a esquerda, pois quando s\u00e3o do tipo inteiro, eles s\u00e3o desconsiderados e somem. Esses cnpj ter\u00e3o menos de 14 caracteres, e voc\u00ea encontraria facilmente com uma varia\u00e7\u00e3o desse script:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers cbp-highlight-hover\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#24292e;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(16, 41, 67, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>select\n\t*\n\t,CnpjCorrigido = right(replicate('0',14)+rtrim(convert(varchar(14),cnpj)),14)\nfrom\n\tEmpresas \nwhere\n\tlen(cnpj) &lt; 14<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t<\/span><span style=\"color: #D73A49\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t,CnpjCorrigido <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">right<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">replicate<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&#39;0&#39;<\/span><span style=\"color: #24292E\">,<\/span><span style=\"color: #005CC5\">14<\/span><span style=\"color: #24292E\">)<\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #005CC5\">rtrim<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">convert<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">varchar<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">14<\/span><span style=\"color: #24292E\">),cnpj)),<\/span><span style=\"color: #005CC5\">14<\/span><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\tEmpresas <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">where<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t<\/span><span style=\"color: #005CC5\">len<\/span><span style=\"color: #24292E\">(cnpj) <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">14<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"848\" height=\"489\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-11.png\" alt=\"\" class=\"wp-image-1883\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-11.png 848w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-11-300x173.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-11-768x443.png 768w\" sizes=\"auto, (max-width: 848px) 100vw, 848px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Tabelas Grandes: Transfer\u00eancia Gradual<\/h3>\n\n\n\n<p>Uma outra estrat\u00e9gia para cen\u00e1rios mais complexos, seria criar uma c\u00f3pia dessa tabela, por\u00e9m vazia, com as altera\u00e7\u00f5es necess\u00e1rias na coluna (ou colunas) do cnpj. Ent\u00e3o, voc\u00ea poderia ir transferindo todos os CNPJ (j\u00e1 aplicando o ajuste acima). Poderia levar apenas as linhas modificadas (usando uma coluna de data de altera\u00e7\u00e3o ou mesmo a feature de <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/track-changes\/about-change-tracking-sql-server?view=sql-server-ver17\">Change Tracking<\/a> do SQL). E, voc\u00ea precisaria de uma janela bem menor, para transferir apenas as \u00faltimas modifica\u00e7\u00f5es e renomear as tabelas. Esse script \u00e9 um rascunho dos procedimentos que deveria fazer (n\u00e3o no mesmo script, mas ao longo dos dias):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"988\" height=\"713\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-6.png\" alt=\"\" class=\"wp-image-1856\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-6.png 988w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-6-300x216.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-6-768x554.png 768w\" sizes=\"auto, (max-width: 988px) 100vw, 988px\" \/><\/a><\/figure>\n\n\n\n<p>Neste cen\u00e1rio, voc\u00ea precisaria ter espa\u00e7o no disco para aguentar a tabela duplicada at\u00e9 a data da janela planejada. \u00c9 uma solu\u00e7\u00e3o que minimiza o tempo de indisponibilidade, visto que s\u00f3 vai existir nessa transfer\u00eancia final dos registros modificados, que pode ser quest\u00e3o de segundos. Mas requer todo esse cuidado de prepara\u00e7\u00e3o ANTES e DEPOIS do processo. Eu j\u00e1 fiz bastante altera\u00e7\u00f5es dessa natureza em clientes com TB de dados em tabelas, e funciona muito bem se voc\u00ea faz um bom planejamento e teste das limita\u00e7\u00f5es da tabela.<\/p>\n\n\n\n<p>Ainda existiriam outras estrat\u00e9gias, como criar uma nova coluna e substituir ela nos lugares, mas acho ela menos prov\u00e1vel de ser usada, principalmente quem quer minimizar o trabalho de altera\u00e7\u00f5es. Mas fica aqui a ideia vaga para caso seja \u00fatil para algu\u00e9m.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>E o particionamento, com alter table switch? N\u00e3o funciona, pois voc\u00ea est\u00e1 mudando a estrutura da tabela.<\/p>\n<\/blockquote>\n\n\n\n<p>Al\u00e9m da tabela em si, se voc\u00ea usa outras features, como CDC, Replica\u00e7\u00e3o, AlwaysON, etc., voc\u00ea pode precisar recriar isso. No Caso do AlwaysOn, ou mirroring, se tiver a op\u00e7\u00e3o de desligar o processo e refazer ap\u00f3s a altera\u00e7\u00e3o, voc\u00ea pode economizar algum tempo com a transfer\u00eancia do log para as outras inst\u00e2ncias (e vale tanto para altera\u00e7\u00e3o com ALTER TABLE ou com tabela nova).<\/p>\n\n\n\n<p>E, lembre-se, ap\u00f3s alterar as colunas, usar um ALTER VIEW ou <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/system-stored-procedures\/sp-refreshview-transact-sql?view=sql-server-ver17\">sp_refreshview&nbsp;<\/a>para fazer com que a view retorne corretamente o novo tipo de dados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Impactos na Mudan\u00e7a de C\u00f3digo<\/h2>\n\n\n\n<p>E por \u00faltimo, mas n\u00e3o menos importante, um fator a considerar MUITO RELEVANTE \u00e9 uma nova coisa a se preocupar a partir do momento em que voc\u00ea transforma sua coluna em texto: COLLATION. Toda coluna texto possui um collation, que \u00e9 o que define as regras de mai\u00fascula\/min\u00fascula, acentos, etc. No caso de um CNPJ, os caracteres usados est\u00e3o na faixa do ASCII (abaixo de 127), e n\u00e3o mudam conforme o collation. Mas o SQL n\u00e3o t\u00e1 nem a\u00ed pra isso, ent\u00e3o, se voc\u00ea usa a coluna de CNPJ em JOINs, UNION, etc., voc\u00ea pode acabar recebendo erros como este: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Cannot resolve the collation conflict between &#8220;Latin1_General_CI_AS&#8221; and &#8220;SQL_Latin1_General_CP1_CI_AS&#8221; in the equal to operation<\/mark>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"324\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-7-1024x324.png\" alt=\"\" class=\"wp-image-1857\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-7-1024x324.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-7-300x95.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-7-768x243.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-7.png 1111w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Para resolver isso, ou voc\u00ea ajusta o collation da coluna, ao criar a tabela, ou vai ter que ajustar no c\u00f3digo;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"474\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-8.png\" alt=\"\" class=\"wp-image-1858\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-8.png 638w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/07\/image-8-300x223.png 300w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/a><\/figure>\n\n\n\n<p>Note que usar o comando COLLATE, pode fazer com que o SQL n\u00e3o use os \u00edndices. O melhor dos mundos seria igualar o uso do collation em toda a inst\u00e2ncia, mas, se n\u00e3o conseguir fazer isso, voc\u00ea tem essa alternativa. <\/p>\n\n\n\n<p><em>&#8220;Ah Rodrigo, mas eu n\u00e3o vou ter problema, porque n\u00e3o uso queries com outros bancos&#8221;<\/em>. Repare no exemplo acima, que uma simples query envolvendo uma tabela tempor\u00e1ria j\u00e1 deu o problema. Ent\u00e3o, se voc\u00ea usa tabela tempor\u00e1ria, tome cuidado com seus joins, unions, etc&#8230; Tudo que envolver a compara\u00e7\u00e3o ou combina\u00e7\u00e3o dessas colunas CNPJ alteradas para texto, estar\u00e3o sujeitas a isso se os collations forem diferentes (no caso da tabela tempor\u00e1ria, se o collation da coluna na tempdb, que por padr\u00e3o \u00e9 o da inst\u00e2ncia, for diferente do collation da coluna da tabela).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">UFA, \u00c9 MUITA COISA, HEIN?!<\/h2>\n\n\n\n<p>Note que esse \u00e9 um processo complexo, e envolve muitos checks e trabalho bra\u00e7al mesmo. Para resumir o que voc\u00ea precisa olhar e se preocupar em planejar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se j\u00e1 trata um cnpj como texto de pelo menos 14 caracteres, ent\u00e3o dificilmente ter\u00e1 problemas no banco. Fa\u00e7a testes para garantir<\/li>\n\n\n\n<li>Se usa n\u00famero como tipo de dado em algum lugar:\n<ul class=\"wp-block-list\">\n<li>Elencar os objetos que precisam de revis\u00e3o e altera\u00e7\u00e3o (ex.: procurar os que tem cnpj no nome ou no texto)<\/li>\n\n\n\n<li>Revisar tipo de dados das colunas das tabelas e das vari\u00e1veis e par\u00e2metros usadas em c\u00f3digo<\/li>\n\n\n\n<li>Planejar atualiza\u00e7\u00e3o das tabelas, preferencialmente em janelas com indisponibilidade:\n<ul class=\"wp-block-list\">\n<li>Rever depend\u00eancias das colunas que ser\u00e3o alteradas <\/li>\n\n\n\n<li>Op\u00e7\u00f5es para altera\u00e7\u00e3o\n<ul class=\"wp-block-list\">\n<li>Tabelas pequenas: ALTER TABLE tendem a funcionar bem, mas pode ser trabalhoso se tiver depend\u00eancias nas colunas alteradas (\u00edndices, colunas computadas, etc.)<\/li>\n\n\n\n<li>Tabelas grandes: Criar uma c\u00f3pia com os campos ajustados e ir transferindo aos poucos em background o que foi modificado. Numa janela, virar o finalzinho restante e renomear as tabelas<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Avaliar desligar solu\u00e7\u00f5es como AlwaysOn, replica\u00e7\u00e3o, etc para minimizar o tempo (se tiver hist\u00f3rico de gargalos) e depois recriar<\/li>\n\n\n\n<li>criar poss\u00edveis depend\u00eancias deixadas para depois da transfer\u00eancia (\u00edndices, constraints, etc.)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Atualizar views (para refletir poss\u00edvel novo tipo de dado alterado)<\/li>\n\n\n\n<li>Revisar joins, unions, etc., envolvendo as colunas de cnpj alteradas, de diferentes bancos (inclusive com tabelas tempor\u00e1rias), para evitar erros de collation<\/li>\n\n\n\n<li>Scripts que podem ser \u00fateis:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Modulos\/ProcuraEmTodosModulos.sql\">Procurar objetos com textos espec\u00edficos em todos bancos<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Tables\/Colunas\/ProcurarColunaPorNome.sql\">Procurar uma coluna com um texto no nome, em todos os bancos<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Misc\/vw.GerarCNPJ-Alfa.sql\">Gerar CNPJ Alfanum\u00e9rico v\u00e1lido<\/a> ou <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Misc\/vw.GerarCNPJ.sql\">Gerar CNPJ v\u00e1lido (somente n\u00fameros)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Tables\/TableSize2.sql\">Obter o tamanho de tabelas<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Index\/GenerateCreateIndex.sql\">Gerar CREATE de \u00cdndices<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Constraints\/Foreign%20Keys\/Gerar%20Creates%20e%20Drops%20de%20Fks.sql\">Gerar DROP\/CREATE de Foreign Keys<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Uma coisa que n\u00e3o falei, aquelas queries que n\u00e3o ficam em procedure, e sim nas aplica\u00e7\u00f5es (chamadas Ad-Hoc), para encontrar elas, precisar\u00edamos de capturar a execu\u00e7\u00e3o atrav\u00e9s de Extended Events, ou trabalhar em conjunto com o time de dev para garantir que eles ir\u00e3o revisar as apps que mandam essas queries.<\/p>\n\n\n\n<p>E lembre-se do que eu disse no in\u00edcio: O banco de dados \u00e9 apenas uma parte do processo. As aplica\u00e7\u00f5es e outras rotinas (como ETL), por exemplo, podem ainda precisar de ajustes. Esse \u00e9 um trabalho que envolver\u00e1 pessoas de v\u00e1rios times para ajudar a mapear.<\/p>\n\n\n\n<p>Se tiver algo ai que eu n\u00e3o coloquei e voc\u00ea acha pertinente, \u00e9 s\u00f3 deixar um coment\u00e1rio (pode ajudar outras pessoas tamb\u00e9m!).<\/p>\n\n\n\n<p>E, se voc\u00ea precisar de apoio no seu banco de dados SQL Server, o time da <a href=\"https:\/\/powertuning.com.br\/\">Power Tuning<\/a> pode te ajudar a revisar e a planejar os impactos do seu banco, j\u00e1 que somos uma consultoria h\u00e1 mais de 10 anos trabalhando com SQL Server.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Daqui um ano, em Julho de 2026, um novo formato de CNPJ vai entrar em vigor: o CNPJ alfanum\u00e9rico! Agora, ele vai aceitar letras! At\u00e9 ent\u00e3o, era somente n\u00fameros. O total de caracteres n\u00e3o vai mudar: 14 (12 caracteres + 2 d\u00edgitos verificadores), mas o fato de poder incluir as letras mai\u00fasculas de A a&hellip;&nbsp;<a href=\"https:\/\/thesqltimes.com\/blog\/2025\/07\/22\/cnpj-alfa-numerico-sqlserver\/\" rel=\"bookmark\"><span class=\"screen-reader-text\">CNPJ Alfanum\u00e9rico: Como mudar no seu banco de dados SQL Server<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1887,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[8,3,11,7],"tags":[451,453,448,449,446,456,450,454,457,452,455,447,73,342],"series":[],"class_list":["post-1849","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administracao","category-banco-de-dados-2","category-desenvolvimento","category-sql-server","tag-alfa","tag-alfanumerico","tag-alteracao","tag-banco","tag-cnpj","tag-cpf","tag-inteiro","tag-letras","tag-modelagem","tag-numerico","tag-numeros","tag-receita","tag-sql-server","tag-varchar"],"_links":{"self":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/comments?post=1849"}],"version-history":[{"count":44,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1849\/revisions"}],"predecessor-version":[{"id":2090,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1849\/revisions\/2090"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media\/1887"}],"wp:attachment":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media?parent=1849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/categories?post=1849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/tags?post=1849"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/series?post=1849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}