【问题标题】:How to create a stored procedure to copy data from a query to a temporary table?如何创建存储过程以将数据从查询复制到临时表?
【发布时间】:2020-01-13 15:47:49
【问题描述】:

我需要从现有表/查询将数据插入临时表。以下会产生下面详述的错误。

CREATE TABLE SPTemporary
AS
BEGIN
    SELECT * into #temppT
        FROM SampleTable
END

抛出此错误:

消息 156,第 15 级,状态 1,第 3 行
关键字“begin”附近的语法不正确。

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 这段代码没有意义。您已经在子查询中使用into。这不会返回任何结果。
  • sql server 2014 @jarlh
  • 这不只是一个印刷错误吗? CREATE TABLE 应该是 CREATE PROCCREATE PROCEDURE
  • 是的,我的坏@Larnu

标签: sql sql-server stored-procedures error-handling temp-tables


【解决方案1】:

更正你的语法,使用procedure 而不是table

create procedure SPTemporay
as
begin
select * into #temppT
from SampleTable
end

但是,如果您只想要数据副本,那么只需子查询就足够了:

select st.* into #temppT
from SampleTable st

【讨论】:

  • 创建过程 SPTemporay as begin selectinto #temppT from PracticeTable end;当我这样做时,它起作用了,但是,我又这样做了-从#temppT中选择;抛出此错误 Msg 208, Level 16, State 0, Line 12 Invalid object name '#temppT'.
  • @VenkatRamana。 . .当 SP 返回时,您的临时表将被丢弃。临时表范围将仅限于当前会话。因此,简单的解决方案是使用 select * into #temppT from SampleTable 并在当前会话中使用该临时表。
【解决方案2】:

一种方法是:

select st.*
into SPTemporay
from SampleTable st

一个select只能在一张表中放数据。目前尚不清楚您真正想要哪一个 SPTemporary#temppT。如果您确实需要两个表中的相同数据,您可以重复select

编辑:

如果你想要一个存储的过程,你可以这样做:

create procedure SPTemporay
as begin
    select *
    into #temppT
    from SampleTable
end;

这是相当荒谬的,因为临时表在存储过程返回时被丢弃。

【讨论】:

  • 这里我想将数据从样本表复制到#temporary表
【解决方案3】:

我觉得语法不对,应该是这样的:

create table SPTemporay
as
select * from SampleTable

我希望这会有所帮助。

【讨论】:

  • 赞成,Stackoverflow está en idioma inglés。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2020-11-03
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
相关资源
最近更新 更多