Sql 删除并插入到
我希望每天都执行一个存储过程,首先删除指定表中的数据,然后插入新数据 我的存储过程大致如下Sql 删除并插入到,sql,sql-server,tsql,Sql,Sql Server,Tsql,我希望每天都执行一个存储过程,首先删除指定表中的数据,然后插入新数据 我的存储过程大致如下 ALTER PROCEDURE [dbo].[SP_Name] AS BEGIN WITH CTE_Name as ( select Title, First_Name, Surname From table ) DELETE [dbo].[NEW_TABLE] INSERT INTO [
ALTER PROCEDURE [dbo].[SP_Name]
AS BEGIN
WITH CTE_Name as
( select
Title,
First_Name,
Surname
From table
)
DELETE [dbo].[NEW_TABLE]
INSERT INTO [dbo].[NEW_TABLE]
Select * from CTE_NAME
END
当我执行查询时,我得到一个错误:无效的对象名“CTE_name”
我已尝试删除“DELETE[dbo].[NEW_TABLE]”行,执行此操作后,存储过程将运行并将数据插入表中
我正在使用SQl Management Studio 2012您可以尝试以下代码:
ALTER PROCEDURE [dbo].[SP_Name] AS
BEGIN
DECLARE @helperTbl TABLE (Title varchar(100), First_Name varchar(100), Surname varchar(100))
INSERT INTO @helperTbl
SELECT Title,
First_Name,
Surname
FROM [table]
DELETE FROM [dbo].[NEW_TABLE]
INSERT INTO [dbo].[NEW_TABLE]
SELECT * FROM @helperTbl
END
我想你需要在前面加一个分号来分隔你的 下面的代码应该可以工作
DECLARE @TABLE TABLE (
id VARCHAR(100)
)
DELETE FROM @TABLE
;WITH CTE_Name AS
(
SELECT id FROM OtherTable
)
INSERT INTO @TABLE
SELECT id FROM CTE_Name
您发布的内容不是有效的SQL。请发布一个有效的代码示例。将
DELETE
语句移到CTEThanks Mazhar上方,尝试一下,但它抛出了更多错误。CTE是查询的一部分,而不是独立的定义。在本例中,它是DELETE
查询的一部分。即使将其移到上方,也要选择,尽管它没有任何用途。为什么不直接使用INSERT。。。选择..
和您想要的字段?谢谢Michal,这与上面提到的Mazhar类似。我以前做过,没有问题,但那是通过在存储过程中创建临时表实现的。我想知道是不是CTE的不是的liking@Clem_Fandango尝试更新答案。它使用了表变量而不是CTE。@克莱姆·范丹戈:当然,DELETE不喜欢CTE。他们之间有怨恨WITH
子句不是独立的。它被用作SELECT的一部分。在某种程度上,它就像一个可重用的子查询。因此,它将与插入到。。。选择…
。这就是为什么建议将删除移到的上方。感谢您的解释