SQL Sever: хранимая процедура, которая ежедневно вставляет результаты представления в пользовательскую таблицу с отметкой даты - PullRequest
0 голосов
/ 27 июля 2011

Используя пример базы данных AdventureWorks еще до того, как я поработал над ней на моем сервере разработки, я создал представление (Vx_CustomerAddressUpdate) и пользовательскую таблицу (Cx_CustomerAddressUpdate).

CREATE VIEW Vx_CustomerAddressUpdate AS 
SELECT Sales.customer.AccountNumber, 
   Sales.Customer.CustomerType, 
   Sales.Customer.ModifiedDate, 
   Sales.CustomerAddress.ModifiedDate, 
   person.Address.AddressLine1, 
   person.Address.AddressLine2, 
   person.Address.City, 
   Person.Address.PostalCode, 
   Person.StateProvince.Name, 
   Person.CountryRegion.Name
FROM Sales.Customer INNER JOIN Sales.CustomerAddress 
   ON Sales.Customer.CustomerID=Sales.CustomerAddress.CustomerID 
   INNER JOIN Person.Address 
   ON Sales.CustomerAddress.AddressID=Person.Address.AddressID 
   INNER JOIN Person.StateProvince 
   ON person.Address.StateProvinceID=Person.StateProvince.StateProvinceID 
   INNER JOIN Person.CountryRegion ON 
   Person.StateProvince.CountryRegionCode=Person.CountryRegion.CountryRegionCode
WHERE Person.CountryRegion.CountryRegionCode = 'US'

Хранимая процедура будет ежедневно вставлять строки представления в пользовательскую таблицу. Настраиваемая таблица имеет дополнительное поле для отслеживания даты добавления каждой строки в настраиваемую таблицу, которую необходимо обновить во время вставки.

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

Текущие проблемы, с которыми я сталкиваюсь:

  1. SELECT INTO создает новую таблицу. Мне нужно вставить в существующую таблицу. Все решения, которые я нашел для этого, предназначены для явных значений.

  2. Я также пытался SELECT INTO #temptable, но я сталкиваюсь с теми же проблемами, что и выше, когда дело доходит до помещения этих результатов в пользовательскую таблицу.

  3. OPENROWSET представляется излишним для SP, работающего на локальном сервере

1 Ответ

1 голос
/ 27 июля 2011

А как насчет типичного Insert into синтаксиса:

Insert Into Cx_CustomerAddressUpdate (<column list>,dateAdded)
Select <columns>,getdate() as dateAdded
From dbo.Vx_CustomerAddressUpdate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...