Ver Mensaje Individual
  #8 (permalink)  
Antiguo 01/03/2013, 08:09
Avatar de junior1920
junior1920
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tumán
Mensajes: 77
Antigüedad: 14 años
Puntos: 1
Pregunta Respuesta: Procedimeinto Almacenado Generar codigo !!!!!!!

Cita:
Iniciado por GeriReshef Ver Mensaje
Supongo que el problema es que cuando filtras los resultados utilizando el Where - el sistema enumera las filas de nuevo.
La solución puede ser más o menos así:
Código SQL:
Ver original
  1. WITH T AS
  2. (SELECT 'Proy'+RIGHT('00000'+CAST(ROW_NUMBER() OVER(Partition BY anno ORDER BY codigo) AS VARCHAR),6) codigochar,
  3.           *
  4. FROM libreta_topograf2)
  5. SELECT *
  6. FROM   T
  7. WHERE tipo_obra='xxxx';
Espero que te sirva de ayuda.
Hola nuevamente mira cambio la estructura de la BD ahora es asi:

Código SQL:
Ver original
  1. CREATE TABLE libreta_topograf(
  2. codigo INT IDENTITY PRIMARY KEY,
  3. /*codigochar as 'Proy'+ right('00000000'+cast(codigo as varchar(12)),6)persisted,*/
  4. descripcion text,
  5. tipo_obra VARCHAR(180),
  6. sector VARCHAR(100) NOT NULL,
  7. anno datetime NOT NULL,
  8. codlugar INT CONSTRAINT fk_codlugar FOREIGN KEY
  9. REFERENCES lugar_libreta_topograf(codlugar)
  10. );
  11. GO
  12. CREATE TABLE lugar_libreta_topograf(
  13. codlugar INT IDENTITY PRIMARY KEY,
  14. nombre VARCHAR(80),
  15. descrilugar text
  16. );
  17. GO

Y lo que me has indicado sobre usar With funca como si fuese una consulta normal; ahora lo quise implementar en un Procedimiento Almacenado:

Código SQL:
Ver original
  1. ALTER PROCEDURE likesector_dat_lib_topograf
  2.     @nsector VARCHAR(100),
  3.     @msg AS VARCHAR(100) OUTPUT
  4. AS
  5. BEGIN
  6.     SET NOCOUNT ON;
  7.     BEGIN Tran likesector
  8.     BEGIN Try
  9.         WITH T AS
  10.         (SELECT 'Proy'+RIGHT('00000'+CAST(ROW_NUMBER()
  11.         OVER(Partition BY codlugar,YEAR(anno) ORDER BY codlugar,
  12.         YEAR(anno)) AS VARCHAR),6) codigochar,
  13.         *
  14.         FROM libreta_topograf)
  15.         SELECT T.codigo,T.codigochar,T.descripcion,T.tipo_obra,T.sector,lu.nombre,T.anno
  16.         FROM   T INNER JOIN lugar_libreta_topograf lu ON lu.codlugar=T.codlugar
  17.         WHERE T.sector LIKE @nsector + '%'
  18.     SET @msg = 'Si existen registros.'
  19.         COMMIT TRAN likesector
  20.     END try
  21.     BEGIN Catch
  22.         SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la línea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.'
  23.         ROLLBACK TRAN likesector
  24.     END Catch
  25. END
  26. GO

Pero me marca este error:
Sintaxis incorrecta junto a la palabra clave 'with'. Si esta instrucción es una expresión de tabla común o una cláusula xmlnamespaces, la instrucción anterior debe terminarse con punto y coma (;).