SET

10/07/2007 - 20:07 por Clara | Informe spam
Hola,
Estoy usando SQL Server 2005

Tengo algunas funciones escalares que devuelven el dia de la semana a partir
de DatePart(weekDay, date)
Pero el resultado depende de como esté definido SET DATEFIRST.

Yo no sé a priori como tendrá el servidor definido el SET DATEFIRST aunque
he leido que lo pued obtener a partir de @@DATEFIRST
Supongo que lo que debo hacer es en el cuerpo de la funcion algo asi
CREATE FUNCTION funcion

SET DATEFIRST 1 --lunes
...
...
...
SET DATEFIRST @@DATEFIRST
END

porque no me queda claro si @@DATEFIRST depende de la configuracion del
servidor ode la base de datos.
O puedo establecer de alguna forma solo una vez el @@DATEFIRST de la base de
datos?

Grácias

Preguntas similare

Leer las respuestas

#6 Clara
11/07/2007 - 20:23 | Informe spam
ah... tambien..
Vereis. Os expongo el problema y como lo intentaba solucionar.
Tengo una tabla asi:
lngID (int not null)
dtmData smallDateTime (not null) --Fecha
intHoraLaborables (int, not null) Numero de horas trabajadas (de lunes a
viernes. Esto ya me viene de la aplicación)
intHorasExtras(int not null) -- Numero de horas trabajas (Sabado o Domingo.
Tambien me viene de la aplicacion)
intHL (int, calculado) Si intHorasLaborables > 8 -->8; else
intHorasLaborables. (o sea, como máximo 8)
intHE (int, calculado) Si intHoralLaborables > 8 >
intHorasLaborables - 8; else 0 (o sea, las extras que se pasan de 8)
intHES (int, calculado) - Si dayOfWeek(dtmData) = Sabado >
intHorasExtras; else 0;
intHED (int, calculado) Si DayOfWeek(dtmData) =
Domingo >intHorasExtras; else 0;

los cuatro últimos campos son los calculados y para ello tengo las
funciones. Pero para los dos últimos campos, necesito saber el primer dia de
la semana (@@DATEFIRST)

La función para los domingos:
ALTER FUNCTION [dbo].[ObteHoresExtresDiumenge]
(

@ID int, --Codi del registre de la taula tblCOMPersonalDetall
@Data smallDateTime --Data del registre

)
RETURNS int
AS
BEGIN

IF Cast(DatePart(weekDay, @Data) AS Int) = 1
RETURN (SELECT intExtres FROM tblCOMPersonalDetall WHERE lngID = @ID)

RETURN 0 -- Estem a dissabte

END

Lo voy a tener que hacer con SP, pues.

Muchas gracias.







"Federico A. Colli" escribió en el mensaje
news:%23$o21X%
Hola, y porque no haces que dicha función llame al SP?

Carpe diem, tempus fugit.
El hombre sabio no da las respuestas correctas, propone las preguntas
correctas (Claude Levi-Strauss).
La sabiduría no es un producto de la educación sino de toda una vida por
adquirirla (Albert Einstein).
El sabio puede sentarse en un hormiguero, pero sólo el necio se queda
sentado en él (Proverbio chino).

AUS Federico A. Colli
"Clara" escribió en el mensaje
news:
hola,

El problema es que estas funciones son llamadas por campos calculados.
Bueno. veré qué hago.

grácias


"Gustavo Larriera (MVP)"
escribió en el mensaje
news:
Usa un stored procedure.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Clara" wrote:

Hola,
Si hago algo asi:
CREATE FUNCTION funcion
@ID int
RETURNS int
AS
BEGIN

SET DATEFIRST 1


END

Me dá el error "Invalid use of side-effecting or time-dependent
operator in 'SET COMMAND' within a function"
No puedo usar el SET dentro, no? Como lo establezco?

grácias




"Gustavo Larriera (MVP)"
escribió en el mensaje
news:
> SET DATEFIRST se establece en tiempo de ejecución y vale durante la
> sesión.
> Usalo para configurar el valor que deseas y consultalo usando
> @@DATEFIRST
>
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/p...o.Larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna
> clase.
>
>
>
> "Clara" wrote:
>
>> Hola,
>> Estoy usando SQL Server 2005
>>
>> Tengo algunas funciones escalares que devuelven el dia de la semana
>> a partir
>> de DatePart(weekDay, date)
>> Pero el resultado depende de como esté definido SET DATEFIRST.
>>
>> Yo no sé a priori como tendrá el servidor definido el SET DATEFIRST
>> aunque
>> he leido que lo pued obtener a partir de @@DATEFIRST
>> Supongo que lo que debo hacer es en el cuerpo de la funcion algo asi
>> CREATE FUNCTION funcion
>>
>> SET DATEFIRST 1 --lunes
>>
>>
>>
>> SET DATEFIRST @@DATEFIRST
>> END
>>
>> porque no me queda claro si @@DATEFIRST depende de la configuracion
>> del
>> servidor ode la base de datos.
>> O puedo establecer de alguna forma solo una vez el @@DATEFIRST de la
>> base de
>> datos?
>>
>> Grácias
>>
>>
>>










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