SQL Server - Ayuda por favor

 
Vista:

Ayuda por favor

Publicado por Carlos Restrepo (61 intervenciones) el 25/07/2007 21:51:44
Buenas Ingenieros

Una pregunta, tengo un SP que me retorna un numero aleatorio con unas caracteristicas especiales, pero el exec que tengo para ejecutar la cadena me saca el error de que debo declarar la variable scalar @V_FIND, cuando esta ya esta declarada, este es lo que necesito:

Declare @V_FIND int, @V_STR varchar(200), @PI_TABLE varchar(40),
@PI_FIELD varchar(40), @PI_CTRNNO varchar(10)

set @PI_TABLE ='ACARHTRN'
set @PI_FIELD ='ctrnno'
set @PI_CTRNNO='078C3C6ABB'

set @V_STR = 'set @V_FIND =select 1 from '+@PI_TABLE +' where '+@PI_FIELD+' = '+@PI_CTRNNO

exec (@V_STR )

donde las varibales @PI_TABLE, @PI_FIELD, @PI_CTRNNO llegan como parametros al sp y despues de hacer unas validaciones para la variable @PI_CTRNNO se llega a unos datos similares a los que relacione.

Como veran la variable @V_FIND ya esta declarada, pero esta metida dentro de la cadena que se va aejecutar con el exec para que asigne ese valor, pero me saca el error de que debo declarar la variable @V_FIND.

De antemano gracias, por su valiosa colaboracion.

Carlos Restrepo
[email protected]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda por favor

Publicado por Isaias (3308 intervenciones) el 26/07/2007 19:37:52
Carlos

A menos que este equivocado, esta instruccion SIEMPRE te va a regresar un 1 (uno), ¿cierto?

set @V_STR = N'set @V_FIND =select 1 from '+@PI_TABLE +' where '+@PI_FIELD+' = '+@PI_CTRNNO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda por favor

Publicado por Carlos Restrepo (61 intervenciones) el 26/07/2007 20:04:29
que pena se me fue el 1 pero en el codigo no lo tengo eso era una prueba quie estaba haciendo, de todas formas ya soluciones el problema.

muchas gracias ingeniero

Carlos Restrepo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda por favor

Publicado por Isaias (3308 intervenciones) el 26/07/2007 20:46:15
¿Podrias decirme como lo resolviste?

Porque yo estaba haciendo un codigo con SP_EXECUTESQL, ya que el EXEC (String), ya no se recomienda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

lo hice asi...

Publicado por carlos restrepo (61 intervenciones) el 26/07/2007 20:56:27
Lo que necesitaba era que un sp llamara a otro que me da un numero aleatorio con unas caracteristicas especiales, entre ellas, en una posicion va el año en otras dos digitos de un codigo etc la union de varias cosas hasta que los 3 ultimos caracteres del numero son aleatorios, pero en fin el asunto es que dentro del sp que tengo para generar dicho numero, tengo un ciclo que verifica si ese numero ya esta asignado en la tabla a otro item, y si es asi vulve y busca un nuevo numero, de ahi que al final me toco poner el famoso 1 que estaba retornando, de tal manera que hacia un selec que si encontraba el item con ese numero regresaba cero, sino no regresaba nada y el numero se asignaba a el campo en la tabla, el probelma era que tanto la tabla, como el campo donde debia buscar el valor aleatorio se le mandan por parametro, y queria que en la cadena de texto donde hago el exec (string) de una sola vez asignara el valor de 1 o cero a la variable @v_find.

te adjunto el codigo

ALTER PROCEDURE dbo.UD_SP_AC_GETNUMBERCTRNNO
(@PI_CTRNNO VARCHAR(10)=NULL OUTPUT,
@PI_TABLE VARCHAR(40),
@PI_FIELD VARCHAR(40))
AS
BEGIN
DECLARE @V_FIND INT, @V_NUMBER INT, @V_LEN INT

CREATE TABLE #T_NUMBER (EXIST INT)

SET @V_FIND=1
WHILE @V_FIND=1
BEGIN
SET @PI_CTRNNO=RIGHT(YEAR(GETDATE()),2)
while LEN(@PI_CTRNNO)<10
begin
IF LEN(@PI_CTRNNO)=2 OR LEN(@PI_CTRNNO)=4 or LEN(@PI_CTRNNO)=6
BEGIN
SET @V_LEN=LEN(@PI_CTRNNO)
WHILE LEN(@PI_CTRNNO)=@V_LEN
BEGIN
SET @V_NUMBER=round(rand()*100,0)
IF @V_NUMBER BETWEEN 48 AND 57
SET @PI_CTRNNO=@PI_CTRNNO+CHAR(@V_NUMBER)
END
END
ELSE
BEGIN
SET @V_NUMBER=round(rand()*100,0)
IF @V_NUMBER BETWEEN 97 AND 122
SET @PI_CTRNNO=@PI_CTRNNO+UPPER(char(@V_NUMBER))
END
END

exec('INSERT INTO #T_NUMBER(EXIST) SELECT 1 FROM '+@PI_TABLE+' WHERE '+@PI_FIELD+' = '+''''+@PI_CTRNNO+'''')

SET @V_FIND=(SELECT EXIST FROM #T_NUMBER)
END
SELECT @PI_CTRNNO
END

muchas gracias por tu respuesta

carlos restrepo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar