SQL Server执行安装python环境

安装注意事项

启用python脚本支持

sql 复制代码
sp_configure 'external scripts enabled', 1;
RECONFIGURE;

安装后接受 Python EULA协议

sql 复制代码
接受python授权
setup.exe /qs /ACTION=Install /FEATURES=SQL_INST_MR /INSTANCENAME=您的实例名 /IACCEPTROPENLICENSETERMS=1 /IACCEPTPYTHONLICENSETERMS=1

重启SQL服务器

查询python版本 3.7

sql 复制代码
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import sys
print(sys.version)
'

不用requests(需要安装,安装失败)调用URL

复制代码
EXEC sp_execute_external_script
@language = N'Python',
@script = N'
from urllib.request import urlopen, Request
from urllib.parse import urlencode
import pandas as pd

url = "http://localhost/index.html"
params = {"key1": "value1", "key2": "value2"}
full_url = f"{url}?{urlencode(params)}"

try:
    request = Request(full_url)
    with urlopen(request, timeout=10) as response:
        status_code = response.getcode()
        content = response.read().decode("utf-8")[:1000]
except Exception as e:
    status_code = 0
    content = str(e)

OutputDataSet = pd.DataFrame({
    "URL": [full_url],
    "Status": [status_code],
    "Content": [content]
})
'
WITH RESULT SETS ((URL varchar(1000), Status int, Content varchar(1000)));

结果如下

存储过程:

sql 复制代码
CREATE PROCEDURE usp_CheckWebsiteStatus
    @URL varchar(1000)
AS
BEGIN
    -- 创建临时表存储结果
    CREATE TABLE #TempResult (
        URL varchar(1000),
        Status int,
        Content varchar(1000)
    );
    
    -- 使用INSERT EXEC模式捕获结果
    INSERT INTO #TempResult
    EXEC sp_execute_external_script
    @language = N'Python',
    @script = N'
from urllib.request import urlopen, Request
from urllib.parse import urlencode
import pandas as pd

url = URL_param
try:
    request = Request(url)
    with urlopen(request, timeout=10) as response:
        status_code = response.getcode()
        content = response.read().decode("utf-8")[:1000]
except Exception as e:
    status_code = 0
    content = str(e)

OutputDataSet = pd.DataFrame({
    "URL": [url],
    "Status": [status_code],
    "Content": [content]
})
    ',
    @params = N'@URL_param varchar(1000)',
    @URL_param = @URL;
    
    -- 返回结果
    SELECT * FROM #TempResult;
    
    -- 根据状态码执行不同业务逻辑
    DECLARE @Status int;
    SELECT @Status = Status FROM #TempResult;
    
    IF @Status = 200
    BEGIN
        -- 确保日志表存在
        IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'WebsiteStatusLog')
        BEGIN
            CREATE TABLE WebsiteStatusLog (
                LogID int IDENTITY(1,1) PRIMARY KEY,
                CheckTime datetime NOT NULL,
                URL varchar(1000) NOT NULL,
                Status int NOT NULL,
                Content varchar(1000) NULL
            );
        END
        
        -- 记录错误日志
        INSERT INTO WebsiteStatusLog(CheckTime, URL, Status, Content)
        SELECT GETDATE(), URL, Status, Content FROM #TempResult;
    END
    
    -- 清理临时表
    DROP TABLE #TempResult;
END;
GO

-- 使用存储过程
EXEC usp_CheckWebsiteStatus 'http://localhost/index.html';
相关推荐
保持学习ing33 分钟前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
c30%0038 分钟前
内网渗透——红日靶场五
运维·服务器
宇钶宇夕1 小时前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
susu10830189112 小时前
Debian 11 Bullseye 在线安装docker
运维·docker·debian
爱可生开源社区2 小时前
SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
数据库
贾修行2 小时前
SQL Server 空间函数从入门到精通:原理、实战与多数据库性能对比
数据库·sqlserver
傲祥Ax2 小时前
Redis总结
数据库·redis·redis重点总结
love530love2 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
岁岁岁平安2 小时前
CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
linux·运维·centos·centos-7
运维小贺3 小时前
各服务器厂商调整BIOS睿频教程
linux·运维·服务器·性能优化