如何修改存储过程,使其执行结果生成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
相关产品推荐
相关产品推荐

