如何使用SQL Server外部脚本输出变量插入数据至同库SQL表
解决方法
你可以直接使用SQL Server原生的INSERT ... EXEC语法捕获sp_execute_external_script的输出结果,直接插入到提前建好的实体表中,具体操作步骤如下:
步骤1:创建匹配结构的目标实体表
首先你需要提前建好实体表,表的字段顺序、数据类型必须和Python脚本返回的output_table的列完全匹配,示例建表语句如下(根据你实际的字段调整):
CREATE TABLE 你的目标实体表名 ( col1 对应数据类型, col2 对应数据类型, col3 对应数据类型, 你追加的列名 对应数据类型 -- 按需补全所有输出列的定义 )
步骤2:使用INSERT包裹扩展存储过程调用执行
直接把你的sp_execute_external_script调用放在INSERT语句后面即可,修复了你原代码的语法错误和Python逻辑疏漏的完整示例如下:
INSERT INTO 你的目标实体表名 -- 替换为你步骤1中创建的表名 EXECUTE sp_execute_external_script @language=N'Python', @script=N'import pandas as pd # 补充target_table初始化逻辑,避免append报错 target_table = pd.DataFrame(columns=["col1","col2","col3","你自定义的列名"]) -- 替换为你实际的列名 for i in range(len(data.columns)-4): needed_cols=data.iloc[:,[0,1,2,3,i+4]] needed_cols.columns=target_table.columns target_table=target_table.append(needed_cols, ignore_index=True) output_table=target_table', @input_data_1=N'Select col1, col2, col3, 你需要用到的其他列 from dummy_table', -- 原查询只查了3列,要把Python里用到的所有列都加进去 @input_data_1_name=N'data', @output_data_1_name=N'output_table' WITH RESULT SETS UNDEFINED;
注意事项
- 如果需要避免类型匹配错误,可以把末尾的
WITH RESULT SETS UNDEFINED替换为显式的结果集定义,示例如下:
WITH RESULT SETS ( ( col1 INT, col2 NVARCHAR(200), col3 DATETIME, 自定义列名 FLOAT ) )
- 原代码的
sp_execute_external_script的各个参数之间缺少逗号分隔,会触发SQL语法错误,上述示例已经补全了逗号。 - 原Python脚本未初始化
target_table就直接调用append方法,运行会报错,上述示例已经补充了初始化逻辑。
内容的提问来源于stack exchange,提问作者Tanmay Ghosh
相关产品推荐
相关产品推荐

