-3

ロジックが解決したと思うので、このトピックに関連する最後の質問を削除しました。しかし、SSIS パッケージをビルドしようとすると (またはインポート/エクスポート ウィザードを使用するだけでも)、次のエラーが表示されます。

This sql statement is not a query

コードは次のとおりです。

DECLARE @start int, @end int
DECLARE @start_ag int, @end_ag int
DECLARE @custID varchar(25)
DECLARE @custID_final varchar(25)
DECLARE @product varchar(50)
DECLARE @AgreementID int
DECLARE @dept varchar (5)
DECLARE @invDate datetime2
DECLARE @startDate datetime2
DECLARE @endDate datetime2

DECLARE @tempInvoices TABLE
(
ProductNumber varchar(15) not null,
CustomerID varchar(25) not null,
CustomerDept varchar (4) null,
InvoiceDate datetime2 not null,
AgreementID int null,
Quantity int not null,
InvoiceNumber varchar(25) not null,
RowNum int null
)

DECLARE @tempAgreements TABLE
(
AgreementID int,
RowNum int
)

INSERT INTO @tempInvoices
(RowNum, CustomerID, CustomerDept, ProductNumber, Quantity, InvoiceDate, InvoiceNumber)
SELECT ROW_NUMBER() OVER (ORDER BY INVOICE) AS RowNum, Account, Dept, CustomerItem, Qty, InvoiceDate, Invoice
FROM [ensite].[dbo].[UI.CustomerInvoices]
where Suffix = 'GEP'
and InvoiceDate = CONVERT (date, GETDATE() - 1)
SET @custID_final = ''

SELECT @start = 1
SELECT @end = MAX(RowNum) FROM @tempInvoices
WHILE (@start <= @end)
BEGIN
    SELECT @custID = CustomerID from @tempInvoices where RowNum = @start 
    SELECT @dept = CustomerDept from @tempInvoices where RowNum = @start
    SELECT @product = ProductNumber from @tempInvoices where RowNum = @start
    SELECT @invDate = InvoiceDate from @tempInvoices where RowNum = @start
    BEGIN
        if @dept <> ''
            SET @custID_final = @custID + '-' + @dept
        else
            SET @custID_final = @custID
    END
    if @custID_final IN (SELECT DISTINCT CustomerID From [CompuData].[PriceAgreements].[AgreementsCustomersPivot])
        BEGIN
            INSERT INTO @tempAgreements 
            (RowNum, AgreementID)
            SELECT ROW_NUMBER() OVER (ORDER BY AgreementID) AS RowNum, AgreementID 
            From [CompuData].[PriceAgreements].[AgreementsCustomersPivot] 
            WHERE CustomerID = @custID_final
            SELECT @start_ag = 1
            SELECT @end_ag = MAX(RowNum) FROM @tempAgreements
            WHILE (@start_ag <= @end_ag)
                BEGIN
                    SELECT @AgreementID = AgreementID FROM @tempAgreements WHERE RowNum = @start_ag
                    if @product IN (SELECT DISTINCT ProductNumber FROM [CompuData].[PriceAgreements].[AgreementsItemsPivot] WHERE AgreementID = @AgreementID)
                        BEGIN
                            SELECT @startDate = StartDate FROM [CompuData].[PriceAgreements].[PriceAgreemets] WHERE AgreementID = @AgreementID
                            SELECT @endDate = EndDate FROM [CompuData].[PriceAgreements].[PriceAgreemets] WHERE AgreementID = @AgreementID                      
                                if @invDate BETWEEN @startDate AND @endDate
                                    BEGIN
                                        UPDATE @tempInvoices
                                        SET AgreementID = @AgreementID
                                        WHERE RowNum = @start
                                        DELETE FROM @tempAgreements
                                        SELECT @start = @start + 1
                                    END
                                else
                                    BEGIN
                                        if @start_ag = @end_ag
                                        BEGIN
                                            DELETE FROM @tempInvoices where RowNum = @start
                                            SELECT @start = @start + 1
                                        END
                                    else
                                        BEGIN
                                            SELECT @start_ag = @start_ag + 1
                                        END
                                    END

                        END 
                    else
                        BEGIN
                                        if @start_ag = @end_ag
                                        BEGIN
                                            DELETE FROM @tempInvoices where RowNum = @start
                                            SELECT @start = @start + 1
                                        END
                                    else
                                        BEGIN
                                            SELECT @start_ag = @start_ag + 1
                                        END
                                    END
                END
        END
    else
        BEGIN
            DELETE FROM @tempInvoices where RowNum = @start
            SELECT @start = @start + 1
        END
END

INSERT INTO [CompuData].[PriceAgreements].[AgreementsInvoicesPivot]
(CustomerID, AgreementID, ProductNumber, Quantity, InvoiceNumber, InvoiceDate)
SELECT CustomerID, AgreementID, ProductNumber, Quantity, InvoiceNumber, InvoiceDate
FROM @tempInvoices
4

1 に答える 1

3

私の提案は次のとおりです。繰り返しますが、完全なワークフローはわかりませんが、これが私が設計する方法です。

  1. 最初に、SQL 実行タスクを使用して、テーブル [TempInvoices] の存在を確認し、存在しない場合 (存在すべきではありません)、それを作成するパッケージを作成します。

    存在する場合 (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TempInvoices]') AND type in (N'U')) DROP TABLE [dbo].[TempInvoices] GO

    CREATE TABLE [TempInvoices] ( ProductNumber varchar(15) not null, CustomerID varchar(25) not null, CustomerDept varchar (4) null, InvoiceDate datetime2 not null, AgreementID int null, Quantity int not null, InvoiceNumber varchar(25) not null 、RowNum int null )

  2. 手順 1 を繰り返しますが、[tempAgreements] テーブルに対して:

    存在する場合 (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TempAgreements]') AND type in (N'U')) DROP TABLE [dbo].[TempAgreements] GO

    CREATE TABLE [TempAgreements] (AgreementID int, RowNum int )

  3. データ フロー タスクをセットアップして、テーブルにデータを入力します。OLE DB データ ソースを取得するために使用する SQL クエリの一部として含めたクエリ言語を追加できます。プロパティで「Delay Validation」を True に設定してください。

  4. @Zane の指示に従い、これらのステージング テーブルを使用して、後続のデータ フロー タスクに必要な追加のクエリをセットアップします。ステージング テーブルのいくつかの値に基づいて、コードに複数のパスがあるように見えるため、パッケージに複数の道がある可能性があります。

  5. 最後に、最終的なデータ フロー タスクをセットアップして、[AgreementsInvoicesPivot] テーブルに入力します。

これは私がそれを構築することを想像する方法です-これが役立つことを願っています.

于 2013-11-12T19:34:15.417 に答える