创建临时表并使用存储过程将数据加载到其中
Posted
技术标签:
【中文标题】创建临时表并使用存储过程将数据加载到其中【英文标题】:Create temp table and load data into it using Stored Procedure 【发布时间】:2015-10-20 14:43:27 【问题描述】:我有三个不同的 SQL 脚本,我能够执行它们并获得所需的结果。我想将它们全部放入一个临时表中,并将其用作存储过程,并获取显示在临时表上的数据。下面是我创建的过程。
我想知道如何创建一个临时表并通过执行 SP 将这些数据插入其中。
CREATE PROCEDURE [dbo].[sp_SurveyTracking]
AS
BEGIN
SET NOCOUNT ON;
-- AVAILABLE
SELECT DISTINCT P.Clinic
, P.LastName
, P.FirstName
, SA.SI AS SID
, ser.SD
-- , 'Available' as Status
, ss.SDate
, ss.SDtTm
FROM
Table_Name SA
Inner join Schedule ss on sa.SIID = ss.SIID
Inner join Patient p on p.PID = ss.PID
Inner join Clinical.SSJun ssj on ssj.SSJID = ss.SSJID
Inner join Clinical.SS ser on ser.SSID = ssj.SSID
WHERE
SS.SDtTm IS NOT NULL
AND (SS.SDtTm < SS.SDate)
AND (SS.SDate > GETDATE())
AND SS.Canc = 0
AND sa.AD = 'Completed'
AND GETDATE() > ss.SDate
Order by p.CID;
--COMPLETED
SELECT DISTINCT p.Clinic
, p.LastName
, p.FirstName
, ser.SD
--, 'Completed' as Status
, ss.SDate
FROM
Table_Name SA
Inner join Schedule ss on sa.SIID = ss.SIID
Inner join Patient p on p.PID = ss.PID
Inner join Clinical.SSJun ssj on ssj.SSJID = ss.SSJID
Inner join Clinical.SS ser on ser.SSID = ssj.SSID
WHERE
sa.AD = 'Completed' and ss.Cancelled = 0
order by p.CID;
-- OVERDUE
SELECT DISTINCT p.CD
,p.LastName
,p.FirstName
,sa.SIID
,ser.SD
,'Overdue' as Status
,ss.SDate
,GetDate() as CurrentDate
FROM
Table_Name SA
Inner join Schedule ss on sa.SIID = ss.SIID
Inner join Patient p on p.PID = ss.PID
Inner join Clinical.SSJun ssj on ssj.SSJID = ss.SSJID
Inner join Clinical.SS ser on ser.SSID = ssj.SSID
WHERE
GetDate() > ss.SDate and ss.Cancelled = 0
order by p.CID;
END
【问题讨论】:
您不应在程序中使用 sp_ 前缀。它有一个特殊的用途,应该只被系统程序使用 你想要这个在一个临时表中吗?您将不得不修改您的查询,因为它们并不都有列数。此外,应该避免使用 SP_(或者甚至更好地完全删除前缀)。 sqlperformance.com/2012/10/t-sql-queries/sp_prefix 【参考方案1】:您可以在开头定义#table,然后使用
INSERT INTO
将值添加到其中。
类似:
CREATE TABLE #tmp
(
SomeFields VARCHAR(MAX)
);
INSERT INTO #tmp
SELECT * FROM table2
如果您喜欢这个答案,请勾选勾选按钮。 谢谢。
【讨论】:
【参考方案2】:要将 Storec 过程中的数据插入到表/临时表中,首先需要创建表定义
下面是你可以做的示例。
create proc dbo.test
as
select 1 as b
create table #tmp(b int)
insert into #tmp exec dbo.test
【讨论】:
以上是关于创建临时表并使用存储过程将数据加载到其中的主要内容,如果未能解决你的问题,请参考以下文章