2011-07-25 18 views
5

Yo uso el servidor Sql 2008.SQL - Obteniendo el valor actualizado

Tengo una tabla que genera ID. Quiero recuperar el ID generado y almacenarlo en una variable bigint. ¿Cómo puedo hacerlo?

Aquí está el programa almacenado que proporciona el ID como conjunto de resultados. Pero no puedo almacenarlo en una variable bigint.

ALTER PROC SCN.TRANSACTION_UNIQUE_ID_SELECT 
AS 

UPDATE COR.TRANSACTION_UNIQUE_ID 
SET ID = ID + 1 

OUTPUT INSERTED.ID AS ID 
+0

no es más que esto? una 'secuencia' sería una alternativa incorporada. – Randy

Respuesta

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

Establecerá el valor de retorno del procedimiento en @id, pero no en el conjunto de resultados. – TcKs

0

Eso parece a pescado ... UPDATE se incrementará cada ID en su mesa por uno, no?

De todos modos, las variables tienen un @sign, por lo que sólo SET @myvar = ...whatever...

0

Uso 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

Si desea utilizar output que puedas;

declare @ID table (ID bigint) 

update the_table 
    set ID = ID + 1 
output INSERTED.ID into @ID 

declare @bi bigint = (select ID from @ID) 
2

El BigInt debe ser una columna de inserción de identidad, esto hará que SQL Server genere automáticamente los bigints en secuencia para usted. Simplemente pase rowID como un parámetro OUTPUT y configúrelo antes de que el procedimiento finalice después de la inserción/actualización.

Luego puede leerlo y configurarlo según sea necesario.

El procedimiento almacenado podría ser algo como esto (yo sólo he incluido el rowID para mayor claridad):

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 
Cuestiones relacionadas