2011-07-25 12 views
5

Używam serwera Sql 2008.SQL - Zaktualizowano Wartość

Mam tabelę, która generuje identyfikator. Chcę pobrać wygenerowany identyfikator i zapisać go w zmiennej bigint. Jak mogę to zrobić?

Oto przechowywany Proc, który nadaje identyfikator jako zestaw wyników. Ale nie mogę zapisać go w dużej zmiennej.

ALTER PROC SCN.TRANSACTION_UNIQUE_ID_SELECT 
AS 

UPDATE COR.TRANSACTION_UNIQUE_ID 
SET ID = ID + 1 

OUTPUT INSERTED.ID AS ID 
+0

jest tam więcej do tego? "sekwencja" byłaby wbudowaną alternatywą. – Randy

Odpowiedz

-1
DECLARE @id BIGINT 
EXEC @id = SCN.TRANSACTION_UNIQUE_ID_SELECT 
+0

Ustawi ona wartość zwracaną z procedury na @id, ale nie na zestaw wyników. – TcKs

0

To UPDATE wygląda podejrzanie ... to będzie przyrost każdy ID w tabeli o jeden, nie?

Zresztą zmienne mają @sign, więc po prostu SET @myvar = ...whatever...

0

Zastosowanie OUTPUT INTO:

DECLARE @TblID TABLE (ID int) 

UPDATE COR.TRANSACTION_UNIQUE_ID 
SET ID = ID + 1 
OUTPUT INSERTED.ID INTO @TblID (ID) --the output values will be inserted 
            --into @TblID table-variable 
3

Jeśli chcesz użyć output możesz;

2

BigInt powinien być kolumną wstawiania tożsamości, to sprawi, że SQL Server automatycznie wygeneruje dla ciebie bigowania. Po prostu przekazuj identyfikator rowID jako parametr OUTPUT i ustaw go przed zakończeniem procedury po wstawieniu/aktualizacji.

Następnie można go przeczytać wracając i ustawić w razie potrzeby.

Procedura składowana może wyglądać mniej więcej tak (mam tylko obejmowały rowid dla jasności):

CREATE PROCEDURE [Sample].[Save] 
    (

    @rowID bigint OUTPUT 

    ) 
AS 
BEGIN 

SET NOCOUNT ON 

--Do your insert/update here 


--Set the RowID 
SET @rowID = (SELECT SCOPE_IDENTITY()) 

END 
Powiązane problemy