2017-12-26 21 views
0

プロジェクト名の残りの部分を入力するのに役立つトリガーを作成する必要があります。プロジェクト名は私のHostname列から来ますが、インポート時に複数のホスト名セットがあるかもしれません。私はそれがNULL値の残りの部分に記入し、移入して、私のトリガーを更新する必要が上記のファイル名と値に基づいてNull値を入力するSQL Serverトリガー

enter image description here

現在のトリガ結果:私の現在のトリガーは、私はそうのように私のプロジェクトの欄に記入することができます対応するホスト名を持つプロジェクト名。

理想のトリガ結果:

enter image description here

私は動的に動作するように、このトリガーを必要とするので、インポート時に行とプロジェクトの任意の量を記入します。また、Filenameを更新の基準として使用して、インポートされた他のデータセットを誤って更新しないようにしたいと思います。

現在のトリガーコード:
これは私がプロジェクト名を取得できる現在のトリガーです。 ROWIDを想定し

CREATE TRIGGER [trgUpdateProject] 
ON [myTable] 
FOR INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

UPDATE m 
SET m.[Project] = m.[Host name] 
FROM inserted i 
JOIN [myTable] m ON i.[FileName] = m.[FileName] 
WHERE UPPER(m.[Mfg]) IN (SELECT UPPER([Mfg_ID]) FROM [tblMfg_ID]) 
and m.[Project] IS NULL 

END 
+1

現在のトリガーを表示できますか? – Squirrel

+0

確かなことです。ちょうど追加されました – AlanPear

+0

'mf [Mfg]'と 'SELECT UPPER([Mfg_ID]) FROM [tblMfg_ID]'のデータを表示できますか? – Susang

答えて

0
CREATE TRIGGER [trgUpdateProject] 
ON [myTable] 
FOR INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE m 
    SET m.[Project] = m.[Host name] 
    FROM [myTable] m 
    --This grabs the MFG ID in a mapping table. If they match, that hostname is the projectname 
    WHERE UPPER(m.[Mfg]) IN (SELECT UPPER([Mfg_ID]) 
          FROM [tblMfg_ID]) 

END 
+0

[プロジェクト]がnullの場合、クエリは実行されます(更新されます)。 –

+0

私が掲示したトリガコードは、プロジェクト名を対応するホスト名で埋めるトリガのためのものでした。私の質問は、適切なプロジェクト名でヌル値を記入することでした。 – AlanPear

1

は、所望の結果を得るために、クエリの下に使用してみてくださいテーブル

CREATE TRIGGER [trgUpdateProject] 
ON [myTable] 
FOR INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

UPDATE m 
SET m.[Project] = n.[Host name] 
FROM inserted i 
     INNER JOIN [myTable] m ON i.RowID = m.RowID 
     INNER JOIN [tblMfg_ID] n ON m.Mfg = n.Mfg_ID 
WHERE i.[Project] IS NULL 

END 
+0

これがうまくいくかもしれません。私は明日それをテストします。ありがとう – AlanPear

+0

mfgに参加すると、既にプロジェクトが埋め込まれている行と同じ行が生成されます。 – AlanPear

+0

WHERE句で除外されます – Squirrel

0

の主キーです。

テーブルは

CREATE TRIGGER [trgUpdateProject] 
ON updproject 
FOR INSERT,update 
AS 
BEGIN 
SET NOCOUNT ON; 
DECLARE @st1 varchar(5) 
SELECT @st1 = SUBSTRING(hostname,CHARINDEX('t',hostname)+1,1) from inserted 
UPDATE updproject 
SET updproject.Project = 'Host'[email protected] 
where rowid = (select rowid from inserted) and project is null 
END 

以下のフォームに行を挿入してみてくださいホスト名に基づいてプロジェクトを更新するトリガー以下

create table updproject(
rowid varchar(20) not null unique, 
filename varchar(20), 
project varchar(20), 
hostname varchar(20), 
) 

使用すると、以下のフォームである場合

insert into updproject (rowid,filename,hostname) values ('abc123', 'abc1' ,'HostN-012') 

出力:

rowid filename project hostname 
abc123 abc1 HostN HostN-012 
+0

この例で提供されているホスト名はプレースホルダのみです。ホスト名には何らかの名前を付けることができ、必ずしも設定された文字数である必要はありません。 – AlanPear

+0

更新いただきありがとうございます。ホスト名の列に%Host%のような文字列がありますか? –

関連する問題