You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改存储过程,使其执行结果生成dbo.mytesttable可查询表

解决存储过程结果生成永久表的问题

方案一:直接修改原存储过程

修改存储过程,让它自动创建(或清空)dbo.mytesttable并写入数据:

ALTER PROC outbound.usp_Terminals(@AsOfDate date)
AS
BEGIN
    -- 检查目标表是否存在,不存在则创建表结构
    IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'mytesttable' AND schema_id = SCHEMA_ID('dbo'))
    BEGIN
        CREATE TABLE dbo.mytesttable
        (
            airport_code VARCHAR(10), -- 请根据fnGetAirports返回的实际字段类型调整
            airport_name VARCHAR(100),
            airport_city VARCHAR(50),
            airport_state VARCHAR(2)
        )
    END
    ELSE
    BEGIN
        -- 清空表内现有数据(若需要保留历史数据可删除此句,改为追加插入)
        TRUNCATE TABLE dbo.mytesttable
    END

    -- 将查询结果插入永久表
    INSERT INTO dbo.mytesttable
    SELECT  
        airport_code,
        airport_name,
        airport_city,
        airport_state
    FROM 
        dbo.fnGetAirports(@AsOfDate)
END
GO

方案二:不修改存储过程,手动插入到永久表

如果不想改动原存储过程,可先创建目标表,再调用存储过程插入数据:

-- 1. 先创建dbo.mytesttable表结构(只需执行一次)
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'mytesttable' AND schema_id = SCHEMA_ID('dbo'))
BEGIN
    CREATE TABLE dbo.mytesttable
    (
        airport_code VARCHAR(10), -- 字段类型必须和存储过程返回结果一致
        airport_name VARCHAR(100),
        airport_city VARCHAR(50),
        airport_state VARCHAR(2)
    )
END

-- 2. 执行存储过程并插入数据
DECLARE @date date
SET @date = '2024-05-20' -- 替换为实际需要的日期

-- 可选:清空表内现有数据
TRUNCATE TABLE dbo.mytesttable

-- 插入存储过程的输出结果
INSERT INTO dbo.mytesttable
EXEC outbound.usp_Terminals @date

朋友的方法失效原因

  • 使用了临时表#prebuilt_table:临时表仅在当前会话有效,会话结束后会自动销毁,无法后续查询
  • 可能未提前创建临时表的结构:直接执行INSERT INTO #prebuilt_table EXEC ...会因表不存在或结构不匹配报错

内容的提问来源于stack exchange,提问作者Patterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:43:24