2014-03-02 30 views

回答

1

函數SCOPE_IDENTITY()只返回一個值;它不能返回多於一個。問題是,你有這樣的查詢:

select SCOPE_IDENTITY() 
from goals 

這將返回一個goals的每一行價值 - 你的問題。

試試這個:

Insert into Goals(UserID) values (@UserID); 

Insert into ActivityGoals(GoalsID, ActivityID, Longest, Total, Start, [End]) 
    Select SCOPE_IDENTITY(), @ActivityID, @Longest, @Total, @Start, @End); 

儘管這將在幾乎所有環境下工作,要做到這一點,最安全的方式是使用output子句insert

declare @OutputIds table (id int); 
insert into Goals(UserID) 
    output inserted.GoalId into @OutputIds 
    values (@UserID); 

Insert into ActivityGoals(GoalsID, ActivityID, Longest, Total, Start, [End]) 
    Select id, @ActivityID, @Longest, @Total, @Start, @End) 
    from @OutputIds; 

這也有個好處(如果你想)你可以插入多行並捕獲所有的ID。

+0

此程序未運行?你可以試試這個嗎? –

+0

我添加了一個缺少的關鍵字。如果你設置了一個SQL小提琴,我可以測試它。 –

+0

謝謝!我完成了!使用'Select SCOPE_IDENTITY()'來代替'(從目標中選擇SCOPE_IDENTITY())' –

1

一個基本的解決方案是:

Insert into ActivityGoals(GoalsID, ActivityID, Longest, Total, Start, [End]) 
    values ((Select TOP 1 SCOPE_IDENTITY() from Goals), @ActivityID, @Longest, @Total, @Start, @End) 

但最好的是確定自己在查詢返回只有一個元素。

SCOPE_IDENTITY()函數可能會返回多個值。有關信息scope_identity()

+0

'SCOPE_IDENTITY()'不能返回多個值。 SQL Server在'select'子句中沒有導致結果集中行數相乘的函數。 –

相關問題