每天用另一个SQL填充表

时间:2019-07-09 23:29:11

标签: sql-server tsql stored-procedures

我想用另一个表填充一个表(之后将被截断),但是当我使用此表时,它只是一次拍摄,因为SQL表示该表已经存在。我只想在该艾伯塔省表中添加行。

USE [DATAWAREHOUSE]
GO


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[prcAlberta] As 

(
Select *
INTO AlbertaData_Storing
FROM dbo.AlbertaData_import
where name is not null )

truncate table AlbertaData_import
GO

2 个答案:

答案 0 :(得分:0)

发生错误是因为命令将所有内容从另一个表插入到“ TableName”中,从而创建了具有模式的新表。因此,需要像这样更改查询。

USE [DATAWAREHOUSE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[prcAlberta] 
AS 
BEGIN
    /* If the table not exist then create a blank table */
    IF OBJECT_ID('AlbertaData_Storing') IS NULL
    BEGIN
        SELECT * INTO AlbertaData_Storing
        FROM  dbo.AlbertaData_import WHERE 1 <> 1
    END
    /* 
    Better to use required column only Like :
    INSERT INTO AlbertaData_Storing(Column1,Column2,Column3,...)
    SELECT Column1,Column2,Column3,... FROM dbo.AlbertaData_import
    WHERE Name IS NOT NULL
    */
    INSERT INTO AlbertaData_Storing
    SELECT * FROM dbo.AlbertaData_import
    WHERE Name IS NOT NULL

    TRUNCATE TABLE AlbertaData_import
END                       
GO

答案 1 :(得分:0)

我建议先删除表格,然后插入其中:

ALTER Procedure [dbo].[prcAlberta] A
as
begin
    begin try
        drop table AlbertaData_Storing;
    end try
    begin catch  -- do nothing
    end catch;

    select *
    into AlbertaData_Storing
    from dbo.AlbertaData_import
     where name is not null

    truncate table AlbertaData_import
end;
GO