我想编写一个存储过程,通过连接两个表来在表中插入数据。以下是我的尝试,但我收到了错误。
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}声明。
我非常感谢你的帮助。提前谢谢。
答案 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);