Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Como obtener el ID pk de una tabla dada

Estas en el tema de Como obtener el ID pk de una tabla dada en el foro de SQL Server en Foros del Web. Hola quiero crear un procedimiento almacenado donde le pase como parametro el nombre de la tabla y me devuelva el actual ID + 1 ... ...
  #1 (permalink)  
Antiguo 28/04/2011, 09:22
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 11 meses
Puntos: 2
Como obtener el ID pk de una tabla dada

Hola quiero crear un procedimiento almacenado donde le pase como parametro el nombre de la tabla y me devuelva el actual ID + 1 ... mi problema es q en el @tabla de la ultima linea aparece como no declarado pero si lo esta ... =S ... que esta mal ¿?

....procedure myID ... @tabla as varchar(100) ...

DECLARE @PrimaryKeyName AS VARCHAR(100)

--Obtengo el nombre del primary key de la tabla
SET @PrimaryKeyName =
(
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE a.table_name = @Tabla and constraint_type = 'Primary key'
)

--Obtengo el ID actual de la tabla
DECLARE @ID AS INT
SELECT @ID = MAX(@PrimaryKeyName) FROM @Tabla
  #2 (permalink)  
Antiguo 28/04/2011, 11:13
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Como obtener el ID pk de una tabla dada

En Transact no se pueden usar las variables a ese nivel verdad?
  #3 (permalink)  
Antiguo 28/04/2011, 11:15
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como obtener el ID pk de una tabla dada

SELECT @PrimaryKeyName =
COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE a.table_name = @Tabla and constraint_type = 'Primary key'


Prueba con eso :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 28/04/2011, 11:29
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Como obtener el ID pk de una tabla dada

Cita:
Iniciado por Libras Ver Mensaje
SELECT @PrimaryKeyName =
COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE a.table_name = @Tabla and constraint_type = 'Primary key'


Prueba con eso :)

Saludos!
Me refería a esta linea
SELECT @ID = MAX(@PrimaryKeyName) FROM @Tabla
  #5 (permalink)  
Antiguo 28/04/2011, 11:41
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Como obtener el ID pk de una tabla dada

¿FROM @Tabla?, Nunca....

Si en @Tabla traes el nombre de la tabla, debes utilizar Query Dinamico
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 28/04/2011, 11:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como obtener el ID pk de una tabla dada

Código SQL:
Ver original
  1. DECLARE @PrimaryKeyName AS VARCHAR(100)
  2. DECLARE @tabla AS VARCHAR(100)
  3. DECLARE @ID AS INT
  4.  
  5. SET @tabla='t_q_users'
  6. --Obtengo el nombre del primary key de la tabla
  7. SELECT @PrimaryKeyName =
  8. COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
  9. INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
  10. ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
  11. WHERE a.TABLE_NAME = @Tabla AND constraint_type = 'Primary key'
  12.  
  13. --Obtengo el ID actual de la tabla
  14. print @tabla
  15.  
  16. DECLARE @query VARCHAR(MAX)
  17. print @PrimaryKeyName
  18. SET @query= ' SELECT MAX( ' + @PrimaryKeyName + ') as id into ##temp FROM '  + @Tabla
  19. EXEC Sp_sqlExec @query
  20. SELECT @id=id FROM ##temp
  21. DROP TABLE ##temp
  22. print @id

Prueba con algo asi :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 28/04/2011, 12:07
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Como obtener el ID pk de una tabla dada

Cita:
Iniciado por iislas Ver Mensaje
¿FROM @Tabla?, Nunca....

Si en @Tabla traes el nombre de la tabla, debes utilizar Query Dinamico
Gracias, ahora tengo esto y funciona con exec(@SQL) pero como hago para capturar el resultado de exec(@SQL) en una variable ... probe con set y select pero nada =S
declare @SQL varchar(300)
declare @id int
set @SQL = 'select MAX('+@PrimaryKeyName+') from '+@Tabla
  #8 (permalink)  
Antiguo 28/04/2011, 12:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como obtener el ID pk de una tabla dada

ya probaste con el codigo que te puse???

declare @query varchar(max)
SET @query= ' SELECT MAX( ' + @PrimaryKeyName + ') as id into ##temp FROM ' + @Tabla
exec Sp_sqlExec @query
SELECT @id=id FROM ##temp
DROP TABLE ##temp
print @id


Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 28/04/2011, 12:18
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Como obtener el ID pk de una tabla dada

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. DECLARE @PrimaryKeyName AS VARCHAR(100)
  2. DECLARE @tabla AS VARCHAR(100)
  3. DECLARE @ID AS INT
  4.  
  5. SET @tabla='t_q_users'
  6. --Obtengo el nombre del primary key de la tabla
  7. SELECT @PrimaryKeyName =
  8. COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
  9. INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
  10. ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
  11. WHERE a.TABLE_NAME = @Tabla AND constraint_type = 'Primary key'
  12.  
  13. --Obtengo el ID actual de la tabla
  14. print @tabla
  15.  
  16. DECLARE @query VARCHAR(MAX)
  17. print @PrimaryKeyName
  18. SET @query= ' SELECT MAX( ' + @PrimaryKeyName + ') as id into ##temp FROM '  + @Tabla
  19. EXEC Sp_sqlExec @query
  20. SELECT @id=id FROM ##temp
  21. DROP TABLE ##temp
  22. print @id

Prueba con algo asi :)

Saludos!
Gracias a todos y gracias Libras era lo que necesitaba, complete el query y funciona perfecto

Etiquetas: key, primary, procedure, query, server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:12.