2017-03-09 15 views
0

これに似た質問がありますが、ここでは何度か尋ねられていますが、私は特に、SQLとFileMakerの関係について話しているからです。FileMakerでレコードを追加するときにトリガを使用してSQLのレコードを更新するときにINTO句にOUTPUT句を使用できない

私のトリガーでOUTPUT節は実際に使用されていません。しかし、FileMakerは私が思っているか、私自身がOUTPUT句として自分自身を挿入することができません。ここで

は、例えばトリガーである:私はSQLクエリを使用してレコードを作成することだった場合

CREATE TRIGGER [dbo].[TRG_person__name] 
    ON [dbo].[person] 
    AFTER INSERT,UPDATE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

IF UPDATE (person_name_first) 
    BEGIN 

     UPDATE person 
     SET person_name_first = dbo.mslTitleCase (i.person_name_first) 
     FROM person AS x 
     JOIN inserted AS i ON x._pk_person = i._pk_person 
     WHERE x._pk_person = i._pk_person 

    END 
--END IF 


END 

mslTitleCase機能は、宣言して動作しますされています。 FileMakerで新しいレコードを作成するときにエラーが発生することがあります。

誰かがこのエラーをFileMakerで停止する方法を見つけるヒントはありますか?

ご迷惑をおかけして申し訳ございません。

はあなたに

ルイス

答えて

1

これはバグとして報告されています:http://help.filemaker.com/app/answers/detail/a_id/7870/~/external-sql-data-sources-(ess)%3A-unable-to-write-to-a-table-with-triggers-on

それが解決されたようにそれは見えません。

+0

ありがとうNicolai - 多分私の電子メールはあまりにも曖昧でした!私は挿入を行う別の方法を見つける必要があるように見えますが、更新はちょうど良いトリガーで動作します。 –

1

ありがとうあなたは他の問題を抱えているかもしれませんが、updateの正しい構文は次のとおりです。

UPDATE p 
     SET person_name_first = dbo.mslTitleCase (i.person_name_first) 
    FROM person p JOIN 
     inserted i 
     ON p._pk_person = i._pk_person 
    WHERE p._pk_person = i._pk_person; 

重要な変更はupdate表の別名を参照するということですテーブル名はではありません。私は、personという名前のテーブルの場合、pxよりずっと良いエイリアスだと思います。

+0

ありがとうございます。このベストプラクティスを使用するようにトリガーを更新します。 –

0

アプリケーションでOUTPUT句を使用して、変更されたデータを直接返すように聞こえます。テーブルにトリガがある場合、これは許可されません。変更されたデータをテーブルに出力し、テーブルからデータを選択する必要があります。

問題は、この資料で説明されています https://blogs.msdn.microsoft.com/sqlprogrammability/2008/07/11/update-with-output-clause-triggers-and-sqlmoreresults/

このような場合は、あなたがテーブルにトリガーを追加することはできません。データの修正は、外部ソースから行う必要があります。

+0

あなたの助けをありがとう –

関連する問題