使用不带参数的存储过程将值插入表中

Kri*_*lal 1 sql sql-server

我想编写一个存储过程,通过连接两个表来在表中插入数据.以下是我的尝试,但我收到了一个错误.

CREATE PROCEDURE [dbo].[stored_proc1] 
AS
BEGIN 
    INSERT INTO [dbo].[IN_TABLE]
        SELECT 
            l.col1, l.col2, l.col3, l.col4,
            r.col1, r.col2
        FROM 
            db2.dbo.table1 AS l
        LEFT JOIN 
            dbo.[table2] AS r ON l.col1 = r.col2
        WHERE 
            l.col4 >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), -7);

    DELETE FROM dbo.[IN_TABLE] 
    WHERE col4 < DATEADD(dd, DATEDIFF(dd, 0, GETDATE()),-7);
END
GO
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

消息213,级别16,状态1,过程store_proc1,行18 [批次开始行9]
列名称或提供的值的数量与表定义不匹配.

我在搜索我的任务的解决方案时遇到的所有示例都使用参数并通过将它们设置为特定值来插入它们,这对我没有帮助,因为我想插入一个SELECT语句.

我非常感谢你的帮助.先感谢您.

小智 8

您需要指定要插入的列.不知道In_Table中的字段列表是否发布了确切的代码,但这里是您需要的内容

        INSERT INTO [dbo].[IN_TABLE] (
    col1, col2, col3, etc  (this lists needs to match your list of fields in your select
    )
SELECT l.col1
          ,l.col2
          ,l.col3
          ,l.col4 
          ,r.col1
          ,r.col2
FROM db2.dbo.table1 AS l
LEFT JOIN dbo.[table2] AS r
        ON l.col1= r.col2
WHERE l.col4 >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()),-7);
Run Code Online (Sandbox Code Playgroud)