2017-03-10 9 views
0

文字列を渡す関数の最初の真ん中の姓を取得できます。更新ステートメントの関数にクエリの要素を渡すにはどうすればよいですか。更新ステートメントで関数を呼び出す方法

USE PCUnitTest 
UPDATE p 
SET --Need FIRST_NAME, MIDDLE_NAME, LAST_NAME 
     p.FIRST_NAME = SELECT forename FROM (SELECT * FROM dbo.NameParser(c.CONTACT)) AS FirstName, --shows multipart identifier could not be bound 
     p.FIRST_NAME = SELECT forename FROM (SELECT * FROM dbo.NameParser('Andy D Where')) AS FirstName, --returns Andy 
     p.MIDDLE_NAME = SELECT middle_name FROM (SELECT * FROM dbo.NameParser('Andy D Where')) AS MiddleName, --returns D 
     p.LAST_NAME = SELECT surname FROM (SELECT * FROM dbo.NameParser('Andy D Where')) AS LastName --returns Where 

FROM GMUnitTest.dbo.CONTACT1 c 
     JOIN PCUnitTest.dbo.PEOPLE p 
     ON p.PEOPLE_ID = c.KEY4 
     WHERE c.Key1 = '76'; --Test with a current string 
GO 

答えて

0

を解析

--test更新ロジック、および名前私はあなたがこれに似た何かをする意味を考える:

USE PCUnitTest 
GO 

UPDATE P 
SET 
    P.First_Name = T.ForeName 
    ,P.Middle_Name = T.Middle_Name 
    ,P.Last_name = T.Surname 
FROM GMUnitTest.dbo.Contact1 C 
INNER JOIN PCUnitTest.dbo.People P 
    ON P.People_ID = C.Key4 
CROSS APPLY dbo.NameParser(C.Contact) T 
WHERE C.Key1 = '76' 
; 

私はあなたが解析に使用しているのか分かりません名前は、私はそれが常に最初の名前、ミドルネーム、および姓を返すことがわかります。関数に余分な入力パラメーターを追加して、数値(またはその他の)パラメーターを入力して最初、中、または姓を具体的に要求できるようにすることをお勧めします。

上記のクエリでは、各名前が重複した結果を返すため、同じ値に対して毎回同じ値に対して数回UPDATEを実行することになります。より効率的に更新するために(一の以上のモニカが欠落している可能性があるかどうかOUTER APPLY

あなたの関数に別のパラメータを追加することで、次のような、CROSS APPLY数回使用することができます

USE PCUnitTest 
GO 

UPDATE P 
SET 
    P.First_Name = FirstName.ForeName 
    ,P.Middle_Name = MiddleName.Middle_Name 
    ,P.Last_name = LastName.Surname 
FROM GMUnitTest.dbo.Contact1 C 
INNER JOIN PCUnitTest.dbo.People P 
    ON P.People_ID = C.Key4 
CROSS APPLY dbo.NameParser(C.Contact,1) FirstName 
CROSS APPLY dbo.NameParser(C.Contact,2) MiddleName 
CROSS APPLY dbo.NameParser(C.Contact,3) LastName 

WHERE C.Key1 = '76' 
; 
+0

感謝を私はJStyonsを使用しています。だからあなたはテーブルに参加しなければならず、セット式に関数を入れることはできません。私はJr、Srのような接尾辞を取得するためにそれを追加する方法を理解しなければなりません。私は入力パラメータを使用したものを見ました。 – ERPISE

+0

また、これはトリガーのためのもので、挿入後に、私が挿入したときにintellisenceドロップダウンリストに表示される挿入されたテーブルを参照すると、 "multipart identifier" inserted.contact "bound to be bound" 。任意のアイデアトリガーの挿入されたテーブルを参照する方法? USE PCUnitTest GO UPDATE P SET P.First_Name = T.ForeName 、P.Middle_Name = T.Middle_Name 、P.Last_name = T.Surname GMUnitTest.dbo.Contact1 C INNER FROM PCUnitTestをJOIN .dbo.People P ON P.People_ID = C.Key4 CROSSが適用されます。dbo.NameParser(inserted.Contact)T WHERE C.Key1 = '76' ; – ERPISE

+0

'TRIGGER'の' Inserted'テーブルを参照するのに問題はありません。クエリの 'FROM'句にそれを含める必要があります。それに特有の問題がある場合は、元の質問を実行しようとしている実際の質問で更新するか、問題の内容に基づいて新しい質問をすることをお勧めします。 – 3BK

関連する問題