Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/05/2009, 12:23
Avatar de Dradi7
Dradi7
 
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 7 meses
Puntos: 220
Respuesta: crear funcion: cual es mi error ???

El problema esta q la tabla y la columna no pueden ser declaradas tipo varchar para poder resolver tu problema prueba con lo siguiente
Código sql:
Ver original
  1. CREATE FUNCTION GenerarId
  2. (  
  3.     @Id    VARCHAR(50),
  4.     @Tabla VARCHAR(50)
  5. )
  6.     RETURNS INT
  7. AS
  8. BEGIN
  9.  
  10.     DECLARE @MAX INT             -- Variable de Salida q me Captura el Id
  11.    
  12.     DECLARE @SQL NVARCHAR(MAX)   -- Variable para Ejecutar una Sentencia SQL   
  13.     DECLARE @Param NVARCHAR(MAX) -- Variable para Mandar parametros a la Consulta
  14.  
  15.     SET @Param = N'@ParamId INT OUTPUT' -- Variable a Enviar
  16.     SET @SQL = N'SELECT @ParamId = MAX(' + @Id + ')
  17.                  FROM ' + @Tabla + ';'
  18.  
  19.     EXECUTE SP_EXECUTESQL @SQL, @Param, @ParamId = @MAX OUTPUT;
  20.  
  21.     IF @MAX IS NULL
  22.         SET @MAX = 1;
  23.     ELSE
  24.         SET @MAX = @MAX + 1;
  25.        
  26.     RETURN @MAX
  27. END

lo que realiza el codigo es primero crear una variable nvarchar q recibira la cadena sql ( en formato texto ) luego a traves de la variable @Param le enviamos los parametros a declarar como si fuera un declare normal pero como se va a ejecutar en forma de cadena nuestra sentencia sql entonces debemos declarar la variable param.Nota q el parametro declarado es de tipo output ya q lo necesitamos para q nos devuelva el max de la tabla puedes incluir otras variables para poder hacer verificaciones (where) .
al final se ejecuta la variable sql a traves del proc. SP_EXECUTESQL enviamos los parametros y al final recibimos la variable de salida para tomar el valor devuelto y lo resto es historia.
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones