2011-07-27 10 views
0

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 

現在の課題は、以下のとおりです。

  1. SELECT INTOは、新しいテーブルを作成します。私は既存のテーブルに挿入する必要があります。このために私が見つけたすべてのソリューションは、明示的な値のために設計されています。

  2. 私もSELECT INTO #temptableを試しましたが、私は上記の結果をカスタムテーブルにプッシュする際に同じ問題に直面します。

  3. OPENROWSET典型的なInsert into構文についてどう

+0

:私は常に明示的に列を指定することをお勧めします'INSERT INTO dbo.YourTable(列のリスト)'と 'SELECT(列のリスト)FROM dbo.YourOtherTable .... 'の両方のリストです。 INSERT文のソースとして 'SELECT * 'を使うのは危険で悪い習慣です - ソーステーブルやターゲットテーブルが突然構造を変更したらどうしたらいいですか? –

答えて

1

ローカルサーバー上で実行されているSPのためにやり過ぎのようだ:#1について

Insert Into Cx_CustomerAddressUpdate (<column list>,dateAdded) 
Select <columns>,getdate() as dateAdded 
From dbo.Vx_CustomerAddressUpdate 
+0

+1これは明らかな答えのようです – Lamak

+0

それはいつも何かばかげていませんか?私は選択列の周りに()を持っていた。 – Cassandra

+0

@カッサンドラは聞いてうれしいです。質問に答えを記入してください。 –

関連する問題