Используя пример базы данных 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
Текущие проблемы, с которыми я сталкиваюсь:
SELECT INTO
создает новую таблицу. Мне нужно вставить в существующую таблицу. Все решения, которые я нашел для этого, предназначены для явных значений.
Я также пытался SELECT INTO #temptable
, но я сталкиваюсь с теми же проблемами, что и выше, когда дело доходит до помещения этих результатов в пользовательскую таблицу.
OPENROWSET
представляется излишним для SP, работающего на локальном сервере