AdventureWorksサンプルデータベースを使用してdevサーバーで作業する前に、ビュー(Vx_CustomerAddressUpdate
)とカスタムテーブル(Cx_CustomerAddressUpdate
)。SQL Sever:ビューの結果を日付スタンプ付きのカスタムテーブルに毎日挿入するストアドプロシージャ
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
典型的なInsert into
構文についてどう
:私は常に明示的に列を指定することをお勧めします'INSERT INTO dbo.YourTable(列のリスト)'と 'SELECT(列のリスト)FROM dbo.YourOtherTable .... 'の両方のリストです。 INSERT文のソースとして 'SELECT * 'を使うのは危険で悪い習慣です - ソーステーブルやターゲットテーブルが突然構造を変更したらどうしたらいいですか? –