2016-04-09 22 views
0

テーブルを返す関数から複数の行を挿入するにはどうすればよいですか?おかげであなたの助けテーブルを返す関数から複数の値を挿入する - SQL SERVER

のために、私はこのコードをしようとしていますが、それは一見

+0

、追加してください:NEWIDを(取得)し、あなたの選択のためにそれを使用するビューを作成します'[a01]。[udf_getAddedFriendContacts]'関数定義か、少なくともその戻り値の型をあなたの関数定義と受け取ったエラーと共に返します。 – Alexei

+0

編集[a01]。[udf_getAddedFriendContacts] – BakingCake

+0

それは変な機能です。 '[a01]。[tbl_blockedAccounts]'に参加する必要はありません。なぜなら、そこからフィールドを使用しないからです。あなたはこれを書くことを意味することができますか(関数)? – DimaSUN

答えて

0

あいまいであるというエラーを示している -

INSERT INTO [a01].[tbl_notificationsInbox] 
    (notificationID, notificationMessage, notificationDate, accountID, typeId) 
SELECT NEWID(), @FrA+' has become friends with '[email protected], SYSDATETIMEOFFSET(), accountID, 2 
from [a01].[udf_getAddedFriendContacts](@FriendA, @FriendB) 

が、それはあなたがすることはできません[a01].[udf_getAddedFriendContacts]実現

0

に依存します関数内に副作用があります。あなたの例では、永続テーブルにINSERTを入れて、NEWID()は副作用があると考えられています(私はINSERTを理解していますが、NEWID()は私の普通の機能のようです)。関数内副作用演算子「NEWID」の

不正使用:

エラーメッセージは、以下です。

あなたの関数は、次のようになります。

alter function dbo.testGuidReturn 
(
    @UID UNIQUEIDENTIFIER 
) 
RETURNS @Ret TABLE 
(
    notificationID   UNIQUEIDENTIFIER, 
    notificationMessage  NVARCHAR(100), 
    notificationDate  DATETIME2, 
    accountID    int, 
    typeId     INT 
) 
AS 
BEGIN 

    INSERT INTO @Ret 
    VALUES (@UID, 'Some message', GETDATE(), 10, 20) 

    RETURN 
END 
GO 

-- example call 
SELECT * FROM dbo.testGuidReturn(NEWID()) 

また、それは確定的ではないが、GETDATEが受理されたことに気づきます。巧妙なトリックに

[EDIT]

here示され、機能を簡素化することができます。

create view vwGetNewId as select newid() as New_Id 
GO 

alter function dbo.testGuidReturn() 
RETURNS @Ret TABLE 
(
    notificationID   UNIQUEIDENTIFIER, 
    notificationMessage  NVARCHAR(100), 
    notificationDate  DATETIME2, 
    accountID    int, 
    typeId     INT 
) 
AS 
BEGIN 

    INSERT INTO @Ret 
    SELECT New_Id, 'Some message', GETDATE(), 10, 20 
    FROM vwGetNewId 

    RETURN 
END 
GO 
関連する問題