2016-04-09 19 views
0

Bir tabloyu döndüren bir işlevden birden fazla satırı nasıl ekleyebilirim? Yardımlarınız için teşekkürlerTablo döndüren bir işlevden birden çok değer ekleme - SQL SERVER

Bu kodu çalışıyorum ama

+0

, ekleyiniz: NEWID (get) ve seçiminiz için kullanmak için bir görünüm oluşturmak '[a01]. [udf_getAddedFriendContacts]' fonksiyon tanımınız veya alınan hatanın yanı sıra fonksiyon tanımı veya en azından geri dönüş tipi. – Alexei

+0

[a01] 'i görmek için düzenlenmiştir. [Udf_get AddedFriendContacts] – BakingCake

+0

tuhaf bir işlevdir. Sanırım sizden [.1]. [Tbl_blockedAccounts] 'a katılmanız gerekmiyor, çünkü herhangi bir alanı kullanmıyorsunuz. Bunu yazmayı ne demek istediğini söyleyebilir misin? – DimaSUN

cevap

0

İlk bakışta belirsiz olduğunu da bir hata gösteriliyor -

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) 

ama [a01].[udf_getAddedFriendContacts] gerçekleşme bağlıdır

0

Yapamazsın Bir fonksiyon içerisinde herhangi bir yan etkiye sahip olmak. Örneğinizde, INSERT örneğinizde kalıcı bir tabloya dönün ve NEWID(), yan etkilere sahip olarak kabul edilir (INSERT'u anlıyorum, ancak NEWID() benim için normal bir işlev gibi görünüyor). bir fonksiyonu içerisinde bir yan etki operatörü 'newid' arasında

kullanımı geçersiz:

Hata mesajı aşağıdaki gibidir.

İşleviniz aşağıdaki gibi görünmelidir:

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()) 

Ayrıca ihbar olduğu GETDATE kabul edilir, bu deterministik olmamasına rağmen. Nedeniyle akıllı hile için

[DÜZENLE]

here gösterilen fonksiyon kolaylaştırılabilir:

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 
İlgili konular