Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL服务器:每天将视图结果插入带有日期戳的自定义表的存储过程_Sql Server 2005_Stored Procedures - Fatal编程技术网

Sql server 2005 SQL服务器:每天将视图结果插入带有日期戳的自定义表的存储过程

Sql server 2005 SQL服务器:每天将视图结果插入带有日期戳的自定义表的存储过程,sql-server-2005,stored-procedures,Sql Server 2005,Stored Procedures,在开发服务器上使用AdventureWorks示例数据库之前,我已经创建了一个视图Vx_CustomerAddressUpdate和一个自定义表Cx_CustomerAddressUpdate 存储过程将每天将视图行插入到自定义表中。自定义表有一个附加字段,用于跟踪每行添加到自定义表的日期,需要在插入过程中进行更新 IF EXISTS ( SELECT * FROM sys.procedures WHERE schema_id=schema_id('dbo')

在开发服务器上使用AdventureWorks示例数据库之前,我已经创建了一个视图Vx_CustomerAddressUpdate和一个自定义表Cx_CustomerAddressUpdate

存储过程将每天将视图行插入到自定义表中。自定义表有一个附加字段,用于跟踪每行添加到自定义表的日期,需要在插入过程中进行更新

IF EXISTS (
    SELECT *
        FROM sys.procedures
    WHERE schema_id=schema_id('dbo')
    AND name = N'usp_CustomerAddressUpdate') 
DROP PROCEDURE dbo.usp_CustomerAddressUpdate
GO
CREATE PROCEDURE usp_CustomerAddressUpdate
AS
BEGIN
    SET NOCOUNT ON;
SELECT * INTO Cx_CustomerAddressUpdate 
FROM dbo.Vx_CustomerAddressUpdate
END
GO
我目前面临的挑战是:

“选择到”将创建一个新表。我需要插入到现有表中。我找到的所有解决方案都是为显式值设计的

我也尝试过将SELECT转换为诱惑,但在将这些结果推送到自定义表时,我面临着与上面相同的问题

对于在本地服务器上运行的SP来说,OPENROWSET似乎有些过分

典型的插入语法是什么:


对于1:我始终建议显式指定列列表-插入到dbo.YourTablelist列以及从dbo.yourtothertable中选择列的列表。在INSERT语句中使用SELECT*作为源是危险且糟糕的做法-如果源表和/或目标表突然改变结构怎么办?这总是很愚蠢的,不是吗?“我在选择列集合周围找到了一些东西。@Cassandra很高兴听到这是一件简单的事情:。一定要标出问题的答案。
IF EXISTS (
    SELECT *
        FROM sys.procedures
    WHERE schema_id=schema_id('dbo')
    AND name = N'usp_CustomerAddressUpdate') 
DROP PROCEDURE dbo.usp_CustomerAddressUpdate
GO
CREATE PROCEDURE usp_CustomerAddressUpdate
AS
BEGIN
    SET NOCOUNT ON;
SELECT * INTO Cx_CustomerAddressUpdate 
FROM dbo.Vx_CustomerAddressUpdate
END
GO
Insert Into Cx_CustomerAddressUpdate (<column list>,dateAdded)
Select <columns>,getdate() as dateAdded
From dbo.Vx_CustomerAddressUpdate