Mise à jour dans une fonction SQL Server

J'ai une fonction SQL Server qui obtient un nextID d'une table. C'est assez simple, mais je veux aussi mettre à jour la table pour l'ID utilisé. J'utilise la technique pour mettre à jour dans une table, mais la mise à jour ne fonctionne tout simplement pas. Le code est montré ci-dessous, quelqu'un sait pourquoi?

CREATE FUNCTION [dbo].[GetNextKeyID] ( @user nvarchar(10), @keytype nvarchar(20) ) RETURNS nvarchar(15) AS BEGIN DECLARE @NextID nvarchar(15); -- get the next id for this keytype SELECT @NextID = @user + '_' + @keytype + '_' + CONVERT(VARCHAR(3), (SELECT CASE WHEN @keytype = 'sess' THEN SessionNext WHEN @keytype = 'event' THEN EventNext WHEN @keytype = 'evtc' THEN EventConsultantNext WHEN @keytype = 'act' THEN ActivityNext END) ) FROM dbo.[BARKeys] WHERE [UserID] = @user -- increment the next id for this keytype DECLARE @BARKeys TABLE ( UserID nvarchar(10), SessionNext int, EventNext int, EventConsultantNext int, ActivityNext int ) UPDATE @BARKeys SET SessionNext = CASE WHEN @keytype ='sess' OR @keytype = 'All' THEN SessionNext + 1 ELSE SessionNext END ,EventNext = CASE WHEN @keytype ='event' OR @keytype = 'All' THEN EventNext + 1 ELSE EventNext END ,EventConsultantNext = CASE WHEN @keytype ='evtc' OR @keytype = 'All' THEN EventConsultantNext + 1 ELSE EventConsultantNext END ,ActivityNext = CASE WHEN @keytype ='act' OR @keytype = 'All' THEN ActivityNext + 1 ELSE ActivityNext END WHERE [UserID] = @user -- return the next id RETURN @NextID ; END 

Non, vous ne pouvez pas le faire. Les fonctions sont utilisées à des fins de readonly .

Les fonctions définies par l'user ne peuvent pas être utilisées pour effectuer des actions qui modifient l'état de la database.

Regarde ça

Le travail consiste à créer une procédure stockée

Vous ne pouvez pas modifier datatables de la table dans une fonction.

http://msdn.microsoft.com/en-us/library/ms186755.aspx

Il semble que vous essayez de mettre à jour la variable de table, pas la table physique elle-même. En outre, comme d'autres l'ont mentionné, vous ne pouvez pas mettre à jour datatables d'une table physique dans une fonction. Vous pouvez le faire en utilisant une procédure stockée, cependant. Avez-vous une exigence qui dicte qu'une FONCTION doit être utilisée?