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的一部分。在某种程度上,它就像一个可重用的子查询。因此,它将与插入到。。。选择…
。这就是为什么建议将删除移到的上方。感谢您的解释