テーブルを返す関数から複数の行を挿入するにはどうすればよいですか?おかげであなたの助けテーブルを返す関数から複数の値を挿入する - SQL SERVER
のために、私はこのコードをしようとしていますが、それは一見
テーブルを返す関数から複数の行を挿入するにはどうすればよいですか?おかげであなたの助けテーブルを返す関数から複数の値を挿入する - SQL SERVER
のために、私はこのコードをしようとしていますが、それは一見
あいまいであるというエラーを示している -
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]
実現
に依存します関数内に副作用があります。あなたの例では、永続テーブルに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
、追加してください:NEWIDを(取得)し、あなたの選択のためにそれを使用するビューを作成します'[a01]。[udf_getAddedFriendContacts]'関数定義か、少なくともその戻り値の型をあなたの関数定義と受け取ったエラーと共に返します。 – Alexei
編集[a01]。[udf_getAddedFriendContacts] – BakingCake
それは変な機能です。 '[a01]。[tbl_blockedAccounts]'に参加する必要はありません。なぜなら、そこからフィールドを使用しないからです。あなたはこれを書くことを意味することができますか(関数)? – DimaSUN