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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 Alejandro Mesa
04/05/2006 - 15:02 | Informe spam
Miguel,

Una de las condiciones que debe cumplir una funcion para ser determinista es
que sea schemabinding.

alter function dbo.EliminaSimbols(@texte nvarchar(400))
returns nvarchar(400)
with schemabinding
...


AMB


"miquel busom" wrote:

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




Respuesta Responder a este mensaje
#3 Miguel Egea
04/05/2006 - 20:33 | Informe spam
Muy buena Alejandro!!

"Alejandro Mesa" escribió en el
mensaje news:
Miguel,

Una de las condiciones que debe cumplir una funcion para ser determinista
es
que sea schemabinding.

alter function dbo.EliminaSimbols(@texte nvarchar(400))
returns nvarchar(400)
with schemabinding
...


AMB


"miquel busom" wrote:

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




Respuesta Responder a este mensaje
#4 Alejandro Mesa
05/05/2006 - 02:07 | Informe spam
Gracías Miguel

:-)

AMB

"Miguel Egea" wrote:

Muy buena Alejandro!!

"Alejandro Mesa" escribió en el
mensaje news:
> Miguel,
>
> Una de las condiciones que debe cumplir una funcion para ser determinista
> es
> que sea schemabinding.
>
> alter function dbo.EliminaSimbols(@texte nvarchar(400))
> returns nvarchar(400)
> with schemabinding
> ...
>
>
> AMB
>
>
> "miquel busom" wrote:
>
>> 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
>>
>>
>>
>>



Respuesta Responder a este mensaje
#5 miquel busom
05/05/2006 - 09:18 | Informe spam
Muchísimas grácias a los dos.
Con esto del schemabinding ya me deja indizar, y todo va aceptablemente
rápido.

Grácias

"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



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida