{"id":2146,"date":"2025-11-27T09:45:52","date_gmt":"2025-11-27T12:45:52","guid":{"rendered":"https:\/\/thesqltimes.com\/blog\/?p=2146"},"modified":"2026-03-26T22:42:32","modified_gmt":"2026-03-27T01:42:32","slug":"configurando-o-sql-2025-com-ollama-no-mesmo-pc-localhost","status":"publish","type":"post","link":"https:\/\/thesqltimes.com\/blog\/2025\/11\/27\/configurando-o-sql-2025-com-ollama-no-mesmo-pc-localhost\/","title":{"rendered":"Configurando o SQL 2025 com Ollama no mesmo PC\/localhost"},"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=\"2146\" 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\"> 7<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p>Uma das principais novidades do SQL Server 2025 \u00e9 voc\u00ea poder conectar com as APIs de servi\u00e7os de IA para conseguir usar diretamente no c\u00f3digo T-SQL. E um desses servi\u00e7os mais famosos que temos atualmente \u00e9 o ollama, que \u00e9 open source e voc\u00ea pode instalar na sua pr\u00f3pria m\u00e1quina. Nesse post eu quero te guiar como voc\u00ea pode colocar para funcionar o ollama na mesma m\u00e1quina que o SQL, que \u00e9 um cen\u00e1rio comum quando voc\u00ea quiser testar alguma coisa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sobre o Ollama<\/h2>\n\n\n\n<p>O ollama \u00e9 o que chamamos de <em>inference engine<\/em>. Basicamente, \u00e9 um projeto open source que consegue carregar os mais variados modelos de IA, que geram texto e <a href=\"https:\/\/iatalk.ing\/ia-sql-server-embeddings\/\" title=\"\">embeddings<\/a>, permitindo que voc\u00ea tenha a disposi\u00e7\u00e3o um modelo que consegue processar os seus dados sem precisar usar APIs externas. Isso pode ser muito \u00fatil para cen\u00e1rios onde a privacidade \u00e9 extremamente importante. <\/p>\n\n\n\n<p>Voc\u00ea pode instalar o ollama facilmente no Windows ou Linux, basta seguir as instru\u00e7\u00f5es dessa p\u00e1gina: <a href=\"https:\/\/ollama.com\/\">Ollama<\/a><\/p>\n\n\n\n<p>Para este post, estou assumindo que voc\u00ea instalou o ollama na sua pr\u00f3pria m\u00e1quina, seja no Windows diretamente, ou via wsl2, que \u00e9 o Linux dentro do Windows. E, junto com o ollama, voc\u00ea tem um SQL Server (express ou developer, por exemplo) e quer que esse SQL se conecte no servi\u00e7o que voc\u00ea instalou.<\/p>\n\n\n\n<p>Assumimos que o ollama est\u00e1 rodando na porta 11434, que \u00e9 a porta padr\u00e3o, isto \u00e9, voc\u00ea pode acessar pela web nesse endere\u00e7o: <a href=\"http:\/\/localhost:11434\">http:\/\/localhost:11434<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Primeira tentativa<\/h2>\n\n\n\n<p>O jeito mais f\u00e1cil de testar o acesso ao ollama com o SQL Server 2025 \u00e9 usando a nova <a href=\"http:\/\/sp_invoke_external_rest_endpoint\" title=\"\">sp_invoke_external_rest_endpoint<\/a>. Voc\u00ea precisa habilitar ela usando o seguinte comando:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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);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>EXEC sp_configure 'external rest endpoint enabled',1\nRECONFIGURE<\/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\">EXEC<\/span><span style=\"color: #24292E\"> sp_configure <\/span><span style=\"color: #032F62\">&#39;external rest endpoint enabled&#39;<\/span><span style=\"color: #24292E\">,<\/span><span style=\"color: #005CC5\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">RECONFIGURE<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Uma vez habilitado, voc\u00ea poderia tentar acessar o ollama assim:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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);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>exec sp_invoke_external_rest_endpoint \n\t@url = 'http:\/\/localhost:11434\/v1\/models'\n\t,@method = 'GET'<\/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\">exec<\/span><span style=\"color: #24292E\"> sp_invoke_external_rest_endpoint <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t@url <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;http:\/\/localhost:11434\/v1\/models&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t,@method <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;GET&#39;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Mas, ao tentar acessar o ollama na porta http original, voc\u00ea vai tomar esse erro:<\/p>\n\n\n<p class=\"fonts-plugin-block \" style=\"color: var(--nv-c-2)\">Msg 31610, Level 16, State 1, Procedure sys.sp_invoke_external_rest_endpoint_internal, Line 1 [Batch Start Line 0]<br>Accessing the external endpoint is only allowed via HTTPS.<\/p>\n\n\n<p>Isso \u00e9 devido ao fato de que o SQL Server 2025 somente aceita conex\u00f5es HTTPS, seja usando a sp_invoke_external_rest_endpoint seja usando as outras fun\u00e7\u00f5es de IA.<\/p>\n\n\n\n<p>Ent\u00e3o, agora precisamos de um jeito de fazer o ollama ser executado em uma porta HTTPS, ai na sua m\u00e1quina.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caddy<\/h2>\n\n\n\n<p>Existem in\u00fameras formas da gente conseguir fazer o ollama ser executado via https, sendo algumas delas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Poderia subir com um nginx, criar os certificados e instalar na sua m\u00e1quina. Mas acho muito trabalhoso paraq uem n\u00e3o est\u00e1 acostumado<\/li>\n\n\n\n<li>Poderia subir uma m\u00e1quina em cloud,com ip publico, e usar o nginx ou traefik com lets encrypt para gerar o certificado. De novo, acho trabalhoso e pode ter custos indesejados para voc\u00ea<\/li>\n<\/ul>\n\n\n\n<p>A maneira mais simples e trivial que encontrei de fazer isso no Windows \u00e9 usando uma ferramenta chamada <a href=\"https:\/\/caddyserver.com\/\" title=\"\">Caddy<\/a>, que \u00e9 basicamente um proxy que com alguns comandos simples voc\u00ea consegue fazer ele subir um servi\u00e7o https localhost com um certificado na sua m\u00e1quina.<\/p>\n\n\n\n<p>Primeiro, instale o caddy conforme doc: <a href=\"https:\/\/caddyserver.com\/docs\/install\">Install \u2014 Caddy Documentation<\/a> . Abra um prompt como administrador e use:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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);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>winget install caddy<\/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: #24292E\">winget install caddy<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Ap\u00f3s instalar o caddy, voc\u00ea pode abrir um powershell ou prompt de comando, e digitar &#8220;caddy&#8221;, e voc\u00ea vai ver que voc\u00ea tem este comando a sua disposi\u00e7\u00e3o agora.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"543\" height=\"229\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-9.png\" alt=\"\" class=\"wp-image-2157\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-9.png 543w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-9-300x127.png 300w\" sizes=\"auto, (max-width: 543px) 100vw, 543px\" \/><\/a><\/figure>\n\n\n\n<p>Para que possamos jogar nosso ollama atr\u00e1s de um https, basta rodar esse comando no caddy (abra como administrador):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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);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>caddy reverse-proxy --from localhost:11443 --to :11434<\/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: #6F42C1\">caddy<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">reverse-proxy<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">--from<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">localhost:11443<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">--to<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">:11434<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>reverse-proxy: Informar ao caddy que vamos iniciar um proxy reverso, isto \u00e9, um servi\u00e7o que vai rotear as conexoes que chegam em uma porta para outra<\/li>\n\n\n\n<li>&#8211;from localhost:11443<br>Aqui estamos dizendo ao caddy que ele deve escutar na porta 11443. Logo, se voc\u00ea acessar <a href=\"https:\/\/localhost:11443\">https:\/\/localhost:11443<\/a>, o caddy vai rotear isso para o servi\u00e7o de destino. Voc\u00ea pode escolher a porta que quiser, desde que esteja liberada. Eu escolhi 11443 porque \u00e9 parecida com a porta do ollama. Note que eu preciso especificar o nome &#8220;localhost&#8221;, para que ele gere o certificado https corretamente.<\/li>\n\n\n\n<li>&#8211;to :11434<br>Aqui \u00e9 a porta onde o servi\u00e7o que n\u00f3s queremos est\u00e1. O caddy vai rotear as conex\u00f5es que chegam na porta 11443 para a 11434, que \u00e9 onde o ollama est\u00e1 respondendo<\/li>\n<\/ul>\n\n\n\n<p>Quando voc\u00ea roda esse comando pela primeira vez, o caddy vai gerar os certificados necess\u00e1rios para fazer o https funcionar. Um janela de permiss\u00e3o provavelmente vai se abrir pedindo para voc\u00ea confirmar a instala\u00e7\u00e3o do certificado:<\/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\/11\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"429\" height=\"396\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image.png\" alt=\"\" class=\"wp-image-2147\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image.png 429w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-300x277.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-16x16.png 16w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/a><\/figure><\/div>\n\n\n<p>Clique em Sim\/Yes para confirmar. <\/p>\n\n\n\n<p>Agora, voc\u00ea pode acessar no seu navegador: <a href=\"https:\/\/localhost:11443\/v1\/models\" title=\"\"><\/a><a href=\"https:\/\/localhost:11443\/v1\/models\">https:\/\/localhost:11443\/v1\/models<\/a>. Confirme que o browser reconheceu um o site como https:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"289\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-1.png\" alt=\"\" class=\"wp-image-2148\" style=\"width:819px;height:auto\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-1.png 451w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-1-300x192.png 300w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/a><\/figure>\n\n\n\n<p>Voltando ao SQL, voc\u00ea pode tentar:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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);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>exec sp_invoke_external_rest_endpoint \n\t@url = 'https:\/\/localhost:11443\/v1\/models'\n\t,@method = 'GET'<\/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\">exec<\/span><span style=\"color: #24292E\"> sp_invoke_external_rest_endpoint <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t@url <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;https:\/\/localhost:11443\/v1\/models&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t,@method <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;GET&#39;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>E surpreendentemente, voc\u00ea pode se deparar com outro erro:<\/p>\n\n\n\n<p class=\"has-nv-c-2-color has-text-color has-link-color wp-elements-28a52f3d0da23372a834e95f3667270c\">Msg 31608, Level 16, State 29, Procedure sys.sp_invoke_external_rest_endpoint_internal, Line 1 [Batch Start Line 10]<br>An error occurred, failed to communicate with the external rest endpoint. HRESULT: 0x80070008.<\/p>\n\n\n\n<p>ou<\/p>\n\n\n\n<p class=\"has-nv-c-2-color has-text-color has-link-color wp-elements-7de127611a19e3b7714e611e87a03426\">An error occurred, failed to communicate with the external rest endpoint. HRESULT: 0x80070002.<\/p>\n\n\n\n<p>O c\u00f3digo do erro acima \u00e9 bem gen\u00e9rico do Windows, mas, basicamente, o que est\u00e1 acontecendo \u00e9 que o servi\u00e7o do SQL est\u00e1 tentando acessar na porta https mas n\u00e3o consegue validar o certificado.  Se voc\u00ea habilitar a xp_cmdshell e usar um powershell para acessar, consegue ver uma mensagem de erro melhor:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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);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>exec sp_configure 'show',1;reconfigure;\nexec sp_configure 'xp_cmdshell',1; reconfigure;\nexec xp_cmdshell 'powershell -Command ^&amp; { Invoke-WebRequest -UseBasic https:\/\/localhost:11443\/v1\/models }'<\/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\">exec<\/span><span style=\"color: #24292E\"> sp_configure <\/span><span style=\"color: #032F62\">&#39;show&#39;<\/span><span style=\"color: #24292E\">,<\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">;<\/span><span style=\"color: #D73A49\">reconfigure<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">exec<\/span><span style=\"color: #24292E\"> sp_configure <\/span><span style=\"color: #032F62\">&#39;xp_cmdshell&#39;<\/span><span style=\"color: #24292E\">,<\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">; <\/span><span style=\"color: #D73A49\">reconfigure<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">exec<\/span><span style=\"color: #24292E\"> xp_cmdshell <\/span><span style=\"color: #032F62\">&#39;powershell -Command ^&amp; { Invoke-WebRequest -UseBasic https:\/\/localhost:11443\/v1\/models }&#39;<\/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\/11\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"763\" height=\"188\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-2.png\" alt=\"\" class=\"wp-image-2149\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-2.png 763w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-2-300x74.png 300w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/a><\/figure>\n\n\n\n<p>Note que mesmo via powershell, ele est\u00e1 tendo erro de certificado ainda. E a raz\u00e3o para isso \u00e9 muito simples: O caddy instala o certificado na Certificate User Store, que somente o seu usu\u00e1rio logado atual tem acesso. O servi\u00e7o do SQL roda em uma outra sess\u00e3o do Windows, logo, ele n\u00e3o enxerga esse certificado. Voc\u00ea precisa instalar o mesmo certificado em um local que o servi\u00e7o do SQL acesse.<\/p>\n\n\n\n<p class=\"has-nv-site-bg-color has-nv-c-2-background-color has-text-color has-background has-link-color wp-elements-510befab565ba7499d451ec37e6c77e5\">IMPORTANTE: N\u00e3o \u00e9 necess\u00e1rio habilitar xp_cmdshell para usar os recursos de IA ou HTTP do SQL  2025. Aqui foi apenas um exemplo de como voc\u00ea pode usar ela para testar o cesso e debugar problemas relacionados a sess\u00e3o do SQL.<\/p>\n\n\n\n<p>O caddy coloca, por padr\u00e3o, os certificados nesse diret\u00f3rio: %APPDATA%\\Caddy\\pki\\authorities\\local<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"294\" height=\"149\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-3.png\" alt=\"\" class=\"wp-image-2150\"\/><\/a><\/figure>\n\n\n\n<p>D\u00ea 2 cliques nesse root.crt, e a tela de instala\u00e7\u00e3o do certificado vai se abrir:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"445\" height=\"539\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-4.png\" alt=\"\" class=\"wp-image-2151\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-4.png 445w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-4-248x300.png 248w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/a><\/figure>\n\n\n\n<p>Clique em Install, depois em &#8220;Local Machine&#8221; (Vamos instalar o certificado visivel para todo o PC, o que engloba todas as sess\u00f5es. Voc\u00ea precisa ser admin para fazer isso):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"540\" height=\"526\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png\" alt=\"\" class=\"wp-image-2152\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png 540w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-5-300x292.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-5-16x16.png 16w\" sizes=\"auto, (max-width: 540px) 100vw, 540px\" \/><\/a><\/figure>\n\n\n\n<p>Na pr\u00f3xima tela escolha a segunda op\u00e7\u00e3o, que te permite especificar o local e escolha a Trust RootCertification Authorities:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"520\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png\" alt=\"\" class=\"wp-image-2153\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png 534w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-6-300x292.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-6-16x16.png 16w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/a><\/figure>\n\n\n\n<p>Depois, clique em Next, e em Finish. Pronto, agora se voc\u00ea executar novamente, o SQL consegue acessar pra voc\u00ea:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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(2 * 0.6 * .875rem);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>-- Le a lista de modelos na api do ollama\ndeclare @resp nvarchar(max)\n\nexec sp_invoke_external_rest_endpoint \n\t@url = 'https:\/\/localhost:11443\/v1\/models'\n\t,@method = 'GET'\n\t,@response = @resp output\n\nselect * from openjson(@resp,'$.result.data') with (id varchar(100))\n<\/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: #6A737D\">-- Le a lista de modelos na api do ollama<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">declare<\/span><span style=\"color: #24292E\"> @resp <\/span><span style=\"color: #D73A49\">nvarchar<\/span><span style=\"color: #24292E\">(max)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">exec<\/span><span style=\"color: #24292E\"> sp_invoke_external_rest_endpoint <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t@url <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;https:\/\/localhost:11443\/v1\/models&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t,@method <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;GET&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t,@response <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> @resp <\/span><span style=\"color: #D73A49\">output<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">select<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">*<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">from<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">openjson<\/span><span style=\"color: #24292E\">(@resp,<\/span><span style=\"color: #032F62\">&#39;$.result.data&#39;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">with<\/span><span style=\"color: #24292E\"> (id <\/span><span style=\"color: #D73A49\">varchar<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">100<\/span><span style=\"color: #24292E\">))<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"710\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-10-1024x710.png\" alt=\"\" class=\"wp-image-2158\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-10-1024x710.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-10-300x208.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-10-768x533.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png 1182w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Uma vez que a procedure sp_invoke_external_rest_endpoint funciona normalmente, agora voc\u00ea pode usar os demais comandos, como o CREATE EXTERNAL MODEL, junto com AI_GENERATE_EMBEDDINGS, por exemplo:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" 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);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>create external model Ollama\nwith (\n\t\tLOCATION = 'https:\/\/localhost:11443\/api\/embed'\n\t\t,API_FORMAT = 'ollama'\n\t\t,MODEL_TYPE = EMBEDDINGS\n\t\t,MODEL = 'nomic-embed-text'\n)\n\nselect AI_GENERATE_EMBEDDINGS('gerar embeddings' use model Ollama)<\/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\">create<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">external<\/span><span style=\"color: #24292E\"> model Ollama<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">with<\/span><span style=\"color: #24292E\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t\t<\/span><span style=\"color: #D73A49\">LOCATION<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;https:\/\/localhost:11443\/api\/embed&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t\t,API_FORMAT <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;ollama&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t\t,MODEL_TYPE <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> EMBEDDINGS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">\t\t,MODEL <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&#39;nomic-embed-text&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">select<\/span><span style=\"color: #24292E\"> AI_GENERATE_EMBEDDINGS(<\/span><span style=\"color: #032F62\">&#39;gerar embeddings&#39;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">use<\/span><span style=\"color: #24292E\"> model Ollama)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"473\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-7-1024x473.png\" alt=\"\" class=\"wp-image-2154\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-7-1024x473.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-7-300x139.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-7-768x355.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-7.png 1129w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><em><strong>Importante: Note que no exemplo acima estou usando o modelo nomic-embed-text, voc\u00ea deve baixar no seu ollama usando ollama pull nomic-embed-text (ou outro caso queria testar com outros).<\/strong><\/em><\/p>\n\n\n\n<p>Sem o https configurado corretamente, voc\u00ea receberia um erro semelhante aos anteriores:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"218\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-8-1024x218.png\" alt=\"\" class=\"wp-image-2155\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-8-1024x218.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-8-300x64.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-8-768x163.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2025\/11\/image-8.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-nv-c-2-color has-text-color has-link-color wp-elements-73db378ff8e8c48324161b74283c001b\">Msg 31608, Level 16, State 29, Line 19<br>An error occurred, failed to communicate with the external rest endpoint. HRESULT: 0x80070008.<\/p>\n\n\n\n<p>E ent\u00e3o agora voc\u00ea pode finalmente testar a integra\u00e7\u00e3o com embeddings direto da sua m\u00e1quina. Obvio que em um cen\u00e1rio de produ\u00e7\u00e3o, o ideal \u00e9 separar, colocando o ollama em outro local, para que n\u00e3o afete o processamento do banco. Mas, de todo modo, esse post j\u00e1 te d\u00e1 um norte de como as coisas funcionam e poss\u00edveis problemas e mensagens de erros que voc\u00ea pode obter, mesmo quando o ollama (ou outro servi\u00e7o) estiver em um local diferente.<\/p>\n\n\n\n<p>E lembrando que usando o caddy \u00e9 uma das maneiras poss\u00edveis. Se voc\u00ea tiver outras ai, que sejam mais f\u00e1ceis do que essa, \u00e9 s\u00f3 deixar nos coment\u00e1rios!<\/p>\n\n\n\n<p>Obrigado pela leitura, e fique ligado no blog, que trarei mais e mais assuntos de sql 2025 e IA.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uma das principais novidades do SQL Server 2025 \u00e9 voc\u00ea poder conectar com as APIs de servi\u00e7os de IA para conseguir usar diretamente no c\u00f3digo T-SQL. E um desses servi\u00e7os mais famosos que temos atualmente \u00e9 o ollama, que \u00e9 open source e voc\u00ea pode instalar na sua pr\u00f3pria m\u00e1quina. Nesse post eu quero te&hellip;&nbsp;<a href=\"https:\/\/thesqltimes.com\/blog\/2025\/11\/27\/configurando-o-sql-2025-com-ollama-no-mesmo-pc-localhost\/\" rel=\"bookmark\"><span class=\"screen-reader-text\">Configurando o SQL 2025 com Ollama no mesmo PC\/localhost<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2154,"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":[473,474,472,7],"tags":[479,476,482,478,477,480,394,475,96,71,73,481],"series":[],"class_list":["post-2146","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ia","category-ia-sql-server","category-sql-2025","category-sql-server","tag-479","tag-api","tag-certificado","tag-external-model","tag-http","tag-https","tag-ia","tag-ollama","tag-powershell","tag-sql","tag-sql-server","tag-tls"],"_links":{"self":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/2146","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=2146"}],"version-history":[{"count":7,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/2146\/revisions"}],"predecessor-version":[{"id":2246,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/2146\/revisions\/2246"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media\/2154"}],"wp:attachment":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media?parent=2146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/categories?post=2146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/tags?post=2146"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/series?post=2146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}