簡體   English   中英

如何在 Apache nifi 中執行 Begin-End Transact SQL 語句?

[英]How to execute a Begin-End Transact SQL statements in Apache nifi?

I am trying to execute an SQL statement with Begin - End and Cursor in between using Execute SQL processor in Apache Nifi. 但這會引發錯誤,告訴“無法執行 SQL select 查詢”。 如何在 nifi 中執行交易 SQL 語句? 哪種處理器最適合這個?

下面是我嘗試執行的 SQL 代碼片段,

DECLARE @Cursor CURSOR
DECLARE @stlsn binary(10), @endlsn binary(10), @sequal binary(10), @op char, @upm varbinary(128), @rn numeric, @tg char(10), @ti char(10), @ln char(10), @dv char(10), @cid int

BEGIN
    SET @Cursor = CURSOR FOR
    SELECT * FROM cdc.dbo_SampleDB_CT  

    OPEN @Cursor 
    FETCH NEXT FROM @Cursor INTO @stlsn, @endlsn, @sequal, @op, @upm, @rn, @tg, @ti, @ln, @dv, @cid

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SELECT @op, @rn, @tg, @ti, @ln, @dv
        IF @op= 1 Execute ('DELETE FROM dbo.NewDB WHERE RNo = '+@rn)
        IF @op= 2 Execute ('INSERT INTO dbo.NewDB VALUES ('+@rn+','''+@tg+''','''+@ti+''','''+@ln+''','''+@dv+''')')

      FETCH NEXT FROM @Cursor INTO @stlsn, @endlsn, @sequal, @op, @upm, @rn, @tg, @ti, @ln, @dv, @cid
    END;

    CLOSE @Cursor ;
    DEALLOCATE @Cursor;
END;

這根本不需要是動態的。 你可以只做一個加入的DELETE和一個INSERT...SELECT...

你還沒有指定你的列名,所以我在這里猜測一下。

DELETE FROM n
FROM dbo.NewDB n
JOIN cdc.dbo_SampleDB_CT c ON c.RNo = n.RNo
WHERE c.__$operation = 1;

INSERT INTO dbo.NewDB
SELECT c.RNo,c.tg,c.ti,c.ln,c.dv
FROM cdc.dbo_SampleDB_CT c
WHERE  c.__$operation = 2;

我注意到您尚未處理 CDC 更新行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM