{"id":574,"date":"2016-05-12T16:19:29","date_gmt":"2016-05-12T16:19:29","guid":{"rendered":"http:\/\/www.tiagoneves.net\/blog\/?p=574"},"modified":"2016-05-12T16:19:29","modified_gmt":"2016-05-12T16:19:29","slug":"erro-na-hora-de-concatenar-dados-com-variaveis-diferentes","status":"publish","type":"post","link":"https:\/\/www.tiagoneves.net\/blog\/erro-na-hora-de-concatenar-dados-com-variaveis-diferentes\/","title":{"rendered":"Erro na hora de concatenar dados com vari\u00e1veis diferentes"},"content":{"rendered":"<p>Ol\u00e1 pessoal,<\/p>\n<p>No post de hoje vou compartilhar um problema que tive ao migrar o SQL Server 2008 R2 para o SQL Server 2014, a migra\u00e7\u00e3o foi realizada com sucesso, mas mantive a compatibilidade dos bancos com SQL Server 2008 (100).<\/p>\n<p>Na semana passada fiz o treinamento de SQL Server &#8211; Mastering the database engine, com o Luti (<a href=\"http:\/\/luticm.blogspot.com.br\/\">blog<\/a>\/<a href=\"https:\/\/twitter.com\/luticm\">twitter<\/a>) a prop\u00f3sito recomendo o treinamento, e ele falou algo que me chamou a aten\u00e7\u00e3o que o novo cardinality estimate do SQL Server 2014 s\u00f3 funciona com as bases de dados com a compatibilidade SQL Server 2014 (120), fiz a altera\u00e7\u00e3o de uma base no servidor de homologa\u00e7\u00e3o para testar, por\u00e9m logo na altera\u00e7\u00e3o uma SP que \u00e9 executada direto no servidor deu erro.<em> &#8220;Msg 402, Level 16, State 1, Line 5 The data types datetime and time are incompatible in the add operator.&#8221;<\/em><\/p>\n<p><em>Realizei um debug e o<\/em> problema era na hora de concatenar dados, no exemplo abaixo vou mostrar o trecho da SP, ela funciona no SQL Server 2008, mas n\u00e3o funciona no SQL Server 2014.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true \">-- Query executada em uma base com compatibilidade SQL server 2014 (120)  \r\n\r\nDECLARE\r\n    @Dt_Referencia DATETIME = '2016-05-12',\r\n    @HR_REFERENCIA TIME = '09:47:01';\r\n\r\n  SET @Dt_Referencia = CAST(FLOOR(CAST(@Dt_Referencia AS FLOAT)) AS DATETIME) \r\n      + ISNULL(@HR_REFERENCIA, '00:00:00');\r\n\r\n  SELECT @Dt_Referencia\r\n\r\n  \/*\r\n  Msg 402, Level 16, State 1, Line 5 The data types datetime and time are incompatible in the add operator.\r\n  *\/\r\n<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Errror_ao_concat_data_hora_Sql2014.png\" rel=\"lightbox[574]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-575\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Errror_ao_concat_data_hora_Sql2014-300x76.png?resize=678%2C172\" alt=\"Errror_ao_concat_data_hora_Sql2014\" width=\"678\" height=\"172\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Errror_ao_concat_data_hora_Sql2014.png?resize=300%2C76&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Errror_ao_concat_data_hora_Sql2014.png?resize=768%2C195&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Errror_ao_concat_data_hora_Sql2014.png?resize=1024%2C260&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Errror_ao_concat_data_hora_Sql2014.png?w=1159&amp;ssl=1 1159w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Ao executar o mesmo comando em uma base com a compatibilidade SQL Server 2008 (100), o comando \u00e9 executado sem erro.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\">\u00a0-- Query executada em uma base com compatibilidade SQL server 2008(100)\u00a0 \r\n\r\nALTER DATABASE tempdb \r\nSET COMPATIBILITY_LEVEL = 100;\r\n  \r\n  DECLARE\r\n    @Dt_Referencia DATETIME = '2016-05-12',\r\n    @HR_REFERENCIA TIME = '09:47:01';\r\n\r\n  SET @Dt_Referencia = CAST(FLOOR(CAST(@Dt_Referencia AS FLOAT)) AS DATETIME) \r\n      + ISNULL(@HR_REFERENCIA, '00:00:00');\r\n\r\n  SELECT @Dt_Referencia\r\n<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2008.png\" rel=\"lightbox[574]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-576\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2008.png?resize=678%2C169\" alt=\"Sucesso_ao_concat_data_hora_Sql2008\" width=\"678\" height=\"169\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2008.png?w=1160&amp;ssl=1 1160w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2008.png?resize=300%2C75&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2008.png?resize=768%2C191&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2008.png?resize=1024%2C255&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Dei uma pesquisada pelo erro e encontrei a solu\u00e7\u00e3o no <a href=\"http:\/\/blog.sqlauthority.com\/2015\/10\/30\/sql-server-adding-datetime-and-time-values-using-variables\/\">blog <\/a>do Pinal Dave (<a href=\"http:\/\/blog.sqlauthority.com\/\">blog<\/a>\/<a href=\"https:\/\/twitter.com\/pinaldave\">twitter<\/a>), ele n\u00e3o explicou o motivo do erro, mas postou a solu\u00e7\u00e3o.<\/p>\n<p>O que tem que ser feito \u00e9 converter a vari\u00e1vel do tipo <strong>TIME<\/strong> para <strong>DATETIME<\/strong>, por que a vari\u00e1vel @Dt_Referencia \u00e9 do tipo <strong>DATETIME<\/strong>, como eu disse, o porque no SQL Server 2008 ele faz a convers\u00e3o dos dados e no SQL Server 2014 ele n\u00e3o faz eu n\u00e3o consigo explicar.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\">-- Comando executado com cast na vari\u00e1vel @HR_REFERENCIA\r\n\r\n DECLARE\r\n    @Dt_Referencia DATETIME = '2016-05-12',\r\n    @HR_REFERENCIA TIME = '09:47:01';\r\n\r\n\r\n  SET @Dt_Referencia = CAST(FLOOR(CAST(@Dt_Referencia AS FLOAT)) AS DATETIME)\r\n      + CAST(ISNULL(@HR_REFERENCIA, '00:00:00') AS DATETIME);\r\n\r\n  Select @Dt_Referencia\r\n\r\n<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2014.png\" rel=\"lightbox[574]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-578\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2014.png?resize=678%2C359\" alt=\"Sucesso_ao_concat_data_hora_Sql2014\" width=\"678\" height=\"359\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2014.png?w=1160&amp;ssl=1 1160w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2014.png?resize=300%2C159&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2014.png?resize=768%2C407&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/05\/Sucesso_ao_concat_data_hora_Sql2014.png?resize=1024%2C543&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>Se algu\u00e9m souber explicar o porque deste comportamento no SQL Server 2014, por favor deixe um coment\u00e1rio.<\/p>\n<p>Bom pessoal por hoje \u00e9 isso.<\/p>\n<p>Abra\u00e7os.<\/p>\n<p>Tiago Neves<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 pessoal, No post de hoje vou compartilhar um problema que tive ao migrar o SQL Server 2008 R2 para o SQL Server 2014, a migra\u00e7\u00e3o foi realizada com sucesso, mas mantive a compatibilidade dos bancos com SQL Server 2008 (100). Na semana passada fiz o treinamento de SQL Server &#8211; Mastering the database engine, [&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":"","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,16,5],"tags":[137,39,136,119,116],"class_list":["post-574","post","type-post","status-publish","format-standard","hentry","category-casos-do-dia-a-dia","category-scripts","category-sqlserver-2014","category-virtual-pass-br","tag-compatibility_level","tag-sql-server-2008","tag-sql-server-2014","tag-tiagodba","tag-tiagonevesdba"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6eIyh-9g","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":574,"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\/574","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=574"}],"version-history":[{"count":6,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/574\/revisions"}],"predecessor-version":[{"id":583,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/574\/revisions\/583"}],"wp:attachment":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/media?parent=574"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/categories?post=574"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/tags?post=574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}