【问题标题】:Stored Procedure to Insert Data from one table to another with same column names将数据从一个表插入到另一个具有相同列名的存储过程
【发布时间】:2013-01-07 22:03:01
【问题描述】:

我有一张主桌和几张小桌。

  • Master 表有C1 | C2 | C3 | C4 | C5 |
  • 一张小桌子有C1 | C2 | C3 |

还有@C1(一个值与Master 表中的C1 值匹配的变量。

两个表的列名匹配。我想创建一个存储过程,它将值从Master 表(C1C2C3)插入到较小的表(C1, C2, C3)中。

我的努力:

Create proc Schema.Proc
(@C1 int)
AS
BEGIN
INSERT INTO SmallTable
(C1, C2, C3) --- Columns of smaller table
Values (SELECT C1, C2, C3 ---Columns of Master table
FROM MasterTable)
WHERE C1 = @C1 --- Where value of C1 of Master table matches the value of @C1
END

请帮忙

谢谢

【问题讨论】:

  • 你没有解释你为什么窒息。而且,我正在删除 jquery 标签
  • 您是否为使用 jQuery 的解决方案提供奖励积分?
  • 感谢大家的快速帮助。抱歉,jquery 标记...呵呵,我会尽快进行必要的更改并将第一个答案标记为已接受。谢谢
  • 哈哈——太糟糕了,本来可以很有趣的
  • 只是想澄清一下——这里的 C1 列是主表和小表之间的外键引用吗?

标签: sql sql-server tsql stored-procedures


【解决方案1】:

您需要使用 INSERT INTO ... SELECT ..... 语法 - 不涉及 VALUES 关键字:

CREATE PROCEDURE Schema.Proc
   (@C1 int)
AS
BEGIN
    INSERT INTO SmallTable(C1, C2, C3) --- Columns of smaller table
        SELECT C1, C2, C3 ---Columns of Master table
        FROM MasterTable
        WHERE C1 = @C1 --- Where value of C1 of Master table matches the value of @C1
END

【讨论】:

    【解决方案2】:

    你很接近!只要 C1、C2 和 C3 是相同的数据类型,这应该可以工作。

    Create proc Schema.Proc
    (@C1 int)
    AS
    BEGIN
    INSERT INTO SmallTable
    (C1, C2, C3) --- Columns of smaller table
    SELECT C1, C2, C3 ---Columns of Master table
    FROM MasterTable
    WHERE C1 = @C1
    END
    

    【讨论】:

      【解决方案3】:
      CREATE OR REPLACE PROCEDURE P_INSERT(U_ID NUMBER)
      AS
      BEGIN
      INSERT INTO X(ID,NAME,SALARY)--X IS TABLE NAME 
      SELECT ABC_ID,NAME,SALARY FROM ABC
      WHERE ABC_ID=U_ID;--ABC_ID IS SAME VALUE OF U_ID
      END;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        相关资源
        最近更新 更多