{"id":362,"date":"2015-12-09T11:49:36","date_gmt":"2015-12-09T11:49:36","guid":{"rendered":"http:\/\/www.tiagoneves.net\/blog\/?p=362"},"modified":"2015-12-09T11:49:36","modified_gmt":"2015-12-09T11:49:36","slug":"procedures-nao-documentadas-sp_msforeachdb-e-sp_msforeachtable","status":"publish","type":"post","link":"https:\/\/www.tiagoneves.net\/blog\/procedures-nao-documentadas-sp_msforeachdb-e-sp_msforeachtable\/","title":{"rendered":"Procedures n\u00e3o documentadas sp_MSforeachdb e sp_MSforeachtable"},"content":{"rendered":"<p>Ol\u00e1 pessoal,<\/p>\n<p>No post de hoje vou falar sobre as procedures n\u00e3o documentadas do SQL Server sp_MSforeachdb e sp_MSforeachtable, elas s\u00e3o muito \u00fateis quando voc\u00ea se deparar com uma atividade, em que voc\u00ea necessite buscar as informa\u00e7\u00f5es em todos os bancos de dados ou todas as tabelas.\u00a0Essas procedures executam atividades em loop atrav\u00e9s dos bancos ou tabelas.<\/p>\n<p>Imagine que temos a seguinte situa\u00e7\u00e3o<em>: Preciso executar o comando CHECKDB em todos os meus bancos de forma autom\u00e1tica.<\/em><\/p>\n<p>Poder\u00edamos fazer um script utilizando views de sistemas e montar um loop, porem podemos ficar preso a quantidade de bancos no ato de cria\u00e7\u00e3o do script, ou seja ao incluir, dropar ou at\u00e9 mesmo ao alterar o nome de um banco, voc\u00ea teria que lembrar de alterar o script.<\/p>\n<p>Neste caso podemos utilizar a sp_MSforeachdb como o pr\u00f3prio nome sugere, ela \u00e9 utilizada para executar determinada query para cada base atachada na inst\u00e2ncia.<\/p>\n<p>A sintaxe do comando <strong>sp_MSforeachdb<\/strong> \u00e9:<\/p>\n<p><span style=\"color: #ff0000;\">sp_MSforeachdb @command1, @replacechar,<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><br \/>\n<span style=\"color: #ff0000;\">@command2,<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><br \/>\n<span style=\"color: #ff0000;\">@command3, @precommand, @postcommand<\/span><\/p>\n<p><span style=\"color: #000000;\">onde:<\/span><\/p>\n<table border=\"0\">\n<tbody valign=\"top\">\n<tr>\n<td><strong>Parametro<\/strong><\/td>\n<td><strong>Descri\u00e7\u00e3o<\/strong><\/td>\n<td><strong>Tipo<\/strong><\/td>\n<\/tr>\n<tr>\n<td>@command1<\/td>\n<td>Primeiro comando que ser\u00e1 executado em cada base de dados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@replacechar<\/td>\n<td>Representa o caractere que ser\u00e1 representado pelo nome do banco de dados<\/td>\n<td>Nvarchar(1)<\/td>\n<\/tr>\n<tr>\n<td>@command2<\/td>\n<td>Segundo comando que ser\u00e1 executado em cada base de dados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@command3<\/td>\n<td>Terceiro comando que ser\u00e1 executado em cada base de dados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@precommand<\/td>\n<td>Comando que ser\u00e1 executado antes dos comandos<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@postcommand<\/td>\n<td>Comando que ser\u00e1 executado ap\u00f3s os comandos enviados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Vejamos o exemplo da situa\u00e7\u00e3o acima:<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\">EXECUTE master.sys.sp_MSforeachdb'dbcc checkdb(''?'')'<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachdb.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-367\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachdb.png?resize=678%2C126\" alt=\"procedure_MSforeachdb\" width=\"678\" height=\"126\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachdb.png?w=745&amp;ssl=1 745w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachdb.png?resize=300%2C56&amp;ssl=1 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>O comando vai executar checkdb em todos os bancos de dados da inst\u00e2ncia.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_master.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-368\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_master.png?resize=678%2C129\" alt=\"checkdb_master\" width=\"678\" height=\"129\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_master.png?w=767&amp;ssl=1 767w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_master.png?resize=300%2C57&amp;ssl=1 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a> <a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_msdb.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-369\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_msdb.png?resize=678%2C81\" alt=\"checkdb_msdb\" width=\"678\" height=\"81\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_msdb.png?w=1062&amp;ssl=1 1062w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_msdb.png?resize=300%2C36&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_msdb.png?resize=1024%2C122&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a> <a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_tempdb.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-370\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_tempdb.png?resize=678%2C65\" alt=\"checkdb_tempdb\" width=\"678\" height=\"65\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_tempdb.png?w=1075&amp;ssl=1 1075w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_tempdb.png?resize=300%2C29&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_tempdb.png?resize=1024%2C98&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a> <a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_traces.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-371\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_traces.png?resize=678%2C84\" alt=\"checkdb_traces\" width=\"678\" height=\"84\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_traces.png?w=1181&amp;ssl=1 1181w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_traces.png?resize=300%2C37&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_traces.png?resize=1024%2C127&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a> <a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_TSQL2012.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-372\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_TSQL2012.png?resize=678%2C91\" alt=\"checkdb_TSQL2012\" width=\"678\" height=\"91\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_TSQL2012.png?w=1105&amp;ssl=1 1105w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_TSQL2012.png?resize=300%2C40&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_TSQL2012.png?resize=1024%2C137&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Se por ventura precisar excluir um ou mais bancos, podemos tamb\u00e9m criar filtro.<\/p>\n<pre class=\"theme:ssms2012 wrap:true lang:tsql decode:true\">EXECUTE master.sys.sp_MSforeachdb'if ''?'' NOT IN (''Master'',''MSDB'',''Model'',''Tempdb'') DBCC checkdb(''?'')'<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_systemdabases.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-373\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_systemdabases.png?resize=678%2C397\" alt=\"checkdb_without_systemdabases\" width=\"678\" height=\"397\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_systemdabases.png?w=951&amp;ssl=1 951w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_systemdabases.png?resize=300%2C176&amp;ssl=1 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>No exemplo o checkdb foi executado em todos os bancos de usu\u00e1rios menos nas bases de sistemas.<\/p>\n<p>A procedure <strong>sp_MSforeachtable<\/strong> tem a mesma fun\u00e7\u00e3o, por\u00e9m ela faz um loop em todas as tabelas de um banco de dados.<\/p>\n<p>A sintaxe para utilizar a procedure <strong>sp_MSforeachtable<\/strong> \u00e9:<\/p>\n<p><span style=\"color: #ff0000;\">sp_MSforeachdb @command1, @replacechar,<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><br \/>\n<span style=\"color: #ff0000;\">@command2,<\/span><br \/>\n<span style=\"color: #ff0000;\">@command3, @whereand,<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><br \/>\n<span style=\"color: #ff0000;\">@precommand, @postcommand<\/span><\/p>\n<p>onde:<\/p>\n<table border=\"0\">\n<tbody valign=\"top\">\n<tr>\n<td><strong>Parametro<\/strong><\/td>\n<td><strong>Descri\u00e7\u00e3o<\/strong><\/td>\n<td><strong>Tipo<\/strong><\/td>\n<\/tr>\n<tr>\n<td>@command1<\/td>\n<td>Primeiro comando que ser\u00e1 executado em cada base de dados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@replacechar<\/td>\n<td>Representa o caractere que ser\u00e1 representado pelo nome do banco de dados<\/td>\n<td>Nvarchar(1)<\/td>\n<\/tr>\n<tr>\n<td>@command2<\/td>\n<td>Segundo comando que ser\u00e1 executado em cada base de dados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@command3<\/td>\n<td>Terceiro comando que ser\u00e1 executado em cada base de dados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@whereand<\/td>\n<td>Campo para adicionar informa\u00e7\u00f5es sobre o objeto, por exemplo constraints.<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@precommand<\/td>\n<td>Comando que ser\u00e1 executado antes dos comandos<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<tr>\n<td>@postcommand<\/td>\n<td>Comando que ser\u00e1 executado ap\u00f3s os comandos enviados<\/td>\n<td>Nvarchar(2000)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Imagine que temos a seguinte situa\u00e7\u00e3o<em>: Preciso executar saber o tamanho de cada tabela do meu banco de dados.<\/em><\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\">EXEC sp_MSforeachtable 'EXEC sp_spaceused ''?'''<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachtable.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-375\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachtable.png?resize=678%2C240\" alt=\"procedure_MSforeachtable\" width=\"678\" height=\"240\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachtable.png?w=1271&amp;ssl=1 1271w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachtable.png?resize=300%2C106&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/procedure_MSforeachtable.png?resize=1024%2C363&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Assim como na sp_MSforeachdb tamb\u00e9m podemos filtrar as tabelas que queremos executar o comando.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\"> EXEC sp_MSforeachtable @command1 = 'IF ''?'' NOT IN  (''[HR].[Employees]'',''[Production].[Suppliers]'') EXEC sp_spaceused ''?''';<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_tables.png\" rel=\"lightbox[362]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-376\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_tables.png?resize=678%2C240\" alt=\"checkdb_without_tables\" width=\"678\" height=\"240\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_tables.png?w=1271&amp;ssl=1 1271w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_tables.png?resize=300%2C106&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/12\/checkdb_without_tables.png?resize=1024%2C363&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Al\u00e9m das procedures sp_MSforeachdb e sp_MSforeachtable existem outras procedures n\u00e3o documentadas como as da lista abaixo, n\u00e3o existe suporte ou material oficial\u00a0que ensine a utiliz\u00e1-la por parte da Microsoft.<\/p>\n<p>sp_checknames<br \/>\nsp_columns_rowset<br \/>\nsp_enumoledbdatasources<br \/>\nsp_fixindex<br \/>\nsp_gettypestring<br \/>\nsp_ms_marksystemobject<br \/>\nsp_msaddguidcolumn<br \/>\nsp_msaddguidindex<br \/>\nsp_msaddlogin_implicit_ntlogin<br \/>\nsp_msadduser_implicit_ntlogin<br \/>\nsp_mscheck_uid_owns_anything<br \/>\nsp_msdbuseraccess<br \/>\nsp_msdbuserpriv<br \/>\nsp_msdependencies<br \/>\nsp_msdrop_object<br \/>\nsp_msforeachdb<br \/>\nsp_msforeachtable<br \/>\nsp_msget_qualified_name<br \/>\nsp_msgettools_path<br \/>\nsp_msgetversion<br \/>\nsp_msguidtostr<br \/>\nsp_mshelpcolumns<br \/>\nsp_mshelpindex<br \/>\nsp_mshelptype<br \/>\nsp_msindexspace<br \/>\nsp_msis_pk_col<br \/>\nsp_mskilldb<br \/>\nsp_msloginmappings<br \/>\nsp_mstablekeys<br \/>\nsp_mstablerefs<br \/>\nsp_mstablespace<br \/>\nsp_msunc_to_drive<br \/>\nsp_msuniquecolname<br \/>\nsp_msuniquename<br \/>\nsp_msuniqueobjectname<br \/>\nsp_msuniquetempname<br \/>\nsp_tempdbspace<br \/>\nsp_who2<br \/>\nxp_delete_file<br \/>\nxp_dirtree<br \/>\nxp_enum_oledb_providers<br \/>\nxp_enumcodepages<br \/>\nxp_enumdsn<br \/>\nxp_enumerrorlogs<br \/>\nxp_enumgroups<br \/>\nxp_fileexist<br \/>\nxp_fixeddrives<br \/>\nxp_get_mapi_default_profile<br \/>\nxp_get_mapi_profiles<br \/>\nxp_getnetname<br \/>\nxp_qv<br \/>\nxp_readerrorlog<br \/>\nxp_regaddmultistring<br \/>\nxp_regdeletekey<br \/>\nxp_regdeletevalue<br \/>\nxp_regenumvalues<br \/>\nxp_regread<br \/>\nxp_regremovemultistring<br \/>\nxp_regwrite<br \/>\nxp_subdirs<br \/>\nxp_varbintohexstr<\/p>\n<p>Bom por hoje \u00e9 isso.<\/p>\n<p>Um abra\u00e7o,<\/p>\n<p>Tiago Neves<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 pessoal, No post de hoje vou falar sobre as procedures n\u00e3o documentadas do SQL Server sp_MSforeachdb e sp_MSforeachtable, elas s\u00e3o muito \u00fateis quando voc\u00ea se deparar com uma atividade, em que voc\u00ea necessite buscar as informa\u00e7\u00f5es em todos os bancos de dados ou todas as tabelas.\u00a0Essas procedures executam atividades em loop atrav\u00e9s dos bancos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rop_custom_images_group":[],"rop_custom_messages_group":[],"rop_publish_now":"initial","rop_publish_now_accounts":{"twitter_91251433_91251433":""},"rop_publish_now_history":[],"rop_publish_now_status":"pending","_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,"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Procedures n\u00e3o documentadas sp_MSforeachdb e sp_MSforeachtable","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpscppro_dont_share_socialmedia":false,"_wpscppro_custom_social_share_image":0,"_facebook_share_type":"","_twitter_share_type":"","_linkedin_share_type":"","_pinterest_share_type":"","_linkedin_share_type_page":"","_instagram_share_type":"","_medium_share_type":"","_threads_share_type":"","_google_business_share_type":"","_selected_social_profile":[],"_wpsp_enable_custom_social_template":false,"_wpsp_social_scheduling":{"enabled":false,"datetime":null,"platforms":[],"status":"template_only","dateOption":"today","timeOption":"now","customDays":"","customHours":"","customDate":"","customTime":"","schedulingType":"absolute"},"_wpsp_active_default_template":true},"categories":[2,4,20,5],"tags":[96,14],"class_list":["post-362","post","type-post","status-publish","format-standard","hentry","category-casos-do-dia-a-dia","category-scripts","category-sqlserver-geral","category-virtual-pass-br","tag-loop","tag-sqlserver"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6eIyh-5Q","jetpack-related-posts":[{"id":2414,"url":"https:\/\/www.tiagoneves.net\/blog\/sql-server-2016-esta-chegando-ao-fim-do-suporte-o-que-isso-significa-na-pratica\/","url_meta":{"origin":362,"position":0},"title":"SQL Server 2016 est\u00e1 chegando ao fim do suporte: o que isso significa na pr\u00e1tica?","author":"tiagoneves","date":"27 de abril de 2026","format":false,"excerpt":"O SQL Server 2016 ter\u00e1 seu suporte estendido encerrado em 14 de julho de 2026, o que resultar\u00e1 na falta de atualiza\u00e7\u00f5es de seguran\u00e7a e suporte. Continuar usando essa vers\u00e3o traz riscos como vulnerabilidades e n\u00e3o conformidade regulat\u00f3ria. Planejar a migra\u00e7\u00e3o para vers\u00f5es mais recentes ou cloud deve ser prioridade\u2026","rel":"","context":"Em &quot;Seguran\u00e7a&quot;","block_context":{"text":"Seguran\u00e7a","link":"https:\/\/www.tiagoneves.net\/blog\/category\/seguranca\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/comments?post=362"}],"version-history":[{"count":5,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/362\/revisions"}],"predecessor-version":[{"id":378,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/362\/revisions\/378"}],"wp:attachment":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/media?parent=362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/categories?post=362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/tags?post=362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}