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

时间:2018-04-30 19:54:21

标签: 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

这是我得到的错误:

  

Msg 213,Level 16,State 1,Procedure store_proc1,Line 18 [Batch Start Line 9]
  列名或提供的值数与表定义不匹配。

我在搜索我的任务的解决方案时遇到的所有示例都使用参数并通过将它们设置为特定值来插入它们,这对我没有帮助,因为我想插入{{1}声明。

我非常感谢你的帮助。提前谢谢。

1 个答案:

答案 0 :(得分: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);