stackoverflow で検索機能を使用していますが、問題の答えが見つかりません。しかし、私がこの問題の最初の人になることはできないと確信しています.
私の SQL Server 2012 では、行を挿入していますが、挿入後のトリガーがあります。挿入された疑似テーブルには、特にタイムスタンプを持つ 1 つの行が含まれます。
私の関数では、タイムスタンプは、1 時間ごとに 1 行から x 行のデータセットを生成します。クロス結合では、ターゲット テーブルに挿入しようとしている複数行のデータセットがあります。
心に留めておくべきこと:
ソース テーブルに 1 つの行を挿入すると、トリガーが起動されます。挿入されたテーブルには 1 行が含まれます。ターゲット テーブルに複数の行を挿入しようとしています。
エラーメッセージ:
サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。
コード
-- Insert statements for trigger here
DECLARE @state_time DATETIME,@end_time DATETIME
SET @state_time =
(SELECT state_time from inserted)
SET @end_time =
(SELECT end_time from inserted)
BEGIN TRY
INSERT INTO t_Duration
SELECT
i.interval
,t1.call_id
,t1.agent_id
,t1.service_id
,t1.state
,i.duration
FROM
(SELECT *
FROM myFUnction(@state_time, @end_time, 15)) AS i -- here i get more than one row
CROSS JOIN
(SELECT * from inserted) AS t1
END TRY
BEGIN CATCH
END CATCH
なんで?トリガーで複数の行を挿入することはできませんか? をコピーしINSERT INTO
て、テーブル変数を使用して挿入されたテーブルを偽造すると、挿入が正常に実行されます。
しばらく検索すると、カーソルが必要なようです。これは正しいですか。代替手段はありますか?
手がかりはありますか?
ありがとうフランク
===編集
私が何をしているのかを説明する必要があります...状態、「接続」、call_id、開始タイムスタンプ、および終了タイムスタンプを含むcallrecordsを取得します。期間を報告する必要があります。私は3つのパラメータstart、end、および間隔の持続時間を分単位で持つテーブル値関数を書きました。
結果セットとして、間隔ごとに 1 行のデータセットを取得します。interval_is (1970 年以降の間隔ごとに一意の ID を作成します) と、通話が間隔と重複する場合の期間が含まれています。
ソース テーブルの挿入セット データセット:
---------------------------------------------------------------
| call_id | state | starttime | endtime |
---------------------------------------------------------------
| 4711 | 4 | 2013-10-31 09:25:12 | 2013-10-31 09:32:24 |
---------------------------------------------------------------
関数の結果は次のとおりです。
--------------------------
| interval_id | duration |
--------------------------
| 3991333 | 288 |
--------------------------
| 3991334 | 144 |
--------------------------
クロス結合を使用して、ターゲット テーブルに挿入しようとします。
---------------------------------------------
| interval_id | state | call_id | duration |
---------------------------------------------
| 3991333 | 4 | 4711 | 288 |
---------------------------------------------
| 3991334 | 4 | 4711 | 144 |
---------------------------------------------
そしてそれは失敗します。