Funcion no determinista o imprecisa

04/05/2006 - 11:30 por miquel busom | Informe spam
Hola,
A raiz de un hilo de más abajo y a una respuesta de Miguel Egea y Antonio
soto (a quines agradezco su ayuda), he creado una funcion que elimina
símbolos "raros" al principio de una frase (caracteres que no son ni números
ni letras.)
la función es:

alter function dbo.EliminaSimbols(@texte nvarchar(400))
returns nvarchar(400)
as
begin
declare @c char

set @c = substring(@texte, 1, 1)
while not ((@C >='A' and @c <='z') or (@c >= '0' and @c<='9'))
begin
set @texte = right(@texte,len(@texte)-1)
set @c = substring(@texte, 1, 1)
end

return @texte
end

Luego he creado una columna calculada en una tabla que llama a esta funcion.
Queria poner un índice en esta columna, pero me dice que no se puede crear
el índice porque la función No es determinista o es imprecisa.
Determinista, según he leido, es cuando siempre devuelve lo mismo para las
mismas entrada. Y creo que esta función lo es, no?
Pero no logro encontrar lo de función imprecisa.

Grácias,
Miquel
 

Leer las respuestas

#1 Miguel Egea
04/05/2006 - 12:41 | Informe spam
Hola, así es, puedes intentar evitarlo siguiendo este script, verás que la
que usa replace también vale. (solo funciona la que tiene el replace)
CREATE TABLE SAMPLE (ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,

TEXTO NVARCHAR(100),

TEXTOLIMPIO AS CAST(REPLACE(REPLACE(TEXTO,'[',''),'?','') AS NVARCHAR(100)),

TEXTOLIMPIO2 AS dbo.LimpiaCadena(texto))

GO

CREATE INDEX IX_TEXTOlIMPIO ON SAMPLE (TEXTOLIMPIO)

CREATE INDEX IX_TEXTOlIMPIO2 ON SAMPLE (TEXTOLIMPIO2)

Saludos

"miquel busom" escribió en el mensaje
news:
Hola,
A raiz de un hilo de más abajo y a una respuesta de Miguel Egea y Antonio
soto (a quines agradezco su ayuda), he creado una funcion que elimina
símbolos "raros" al principio de una frase (caracteres que no son ni
números
ni letras.)
la función es:

alter function dbo.EliminaSimbols(@texte nvarchar(400))
returns nvarchar(400)
as
begin
declare @c char

set @c = substring(@texte, 1, 1)
while not ((@C >='A' and @c <='z') or (@c >= '0' and @c<='9'))
begin
set @texte = right(@texte,len(@texte)-1)
set @c = substring(@texte, 1, 1)
end

return @texte
end

Luego he creado una columna calculada en una tabla que llama a esta
funcion.
Queria poner un índice en esta columna, pero me dice que no se puede crear
el índice porque la función No es determinista o es imprecisa.
Determinista, según he leido, es cuando siempre devuelve lo mismo para las
mismas entrada. Y creo que esta función lo es, no?
Pero no logro encontrar lo de función imprecisa.

Grácias,
Miquel



Preguntas similares