Errore Data in sql server 2005

giovedì 26 febbraio 2009 - 11.15

sanfra Profilo | Junior Member

Salve sto uscendo pazzo con una store procedure, vi prego aiutatemi,

la store procedure è questa:
ALTER PROCEDURE [dbo].[spLeaveRequestList2] @IdUser int, @IdResponsible int, @IdLeaveType int, @LeaFromDate varchar(14), @LeaToDate varchar(14), @IdStatus int, @IdApprovalManager int, @query varchar(1000) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @DateStart datetime DECLARE @DateEnd datetime IF @IdUser = -1 SET @IdUser = 0 IF @IdResponsible = -1 SET @IdResponsible = 0 IF @IdLeaveType = -1 SET @IdLeaveType = 0 IF @LeaFromDate = '' SET @LeaFromDate = '19000202000000' IF @LeaToDate = '' SET @LeaToDate = '21001231000000' IF @IdStatus = -1 SET @IdStatus = 0 IF @IdApprovalManager = -1 SET @IdApprovalManager = 0 SET @DateStart = dbo.StringToData(@LeaFromDate) SET @DateEnd = dbo.StringToData(@LeaToDate) IF @QUERY IS NULL SELECT Ler.IDLeaveRequest, Ler.IDUser, Ler.IDLeaveType, dbo.DataToString(Ler.leaFromDate) as leaFromDate, dbo.DataToString(Ler.leaTODate) as leaToDate, Ler.leaAmount, Ler.leaAmountBaseUnit, Ler.leaReason, Ler.leaContactAddress, Ler.leaContactPhone, Ler.leaApproval, isnull(Ler.IDApprovalManager, -1) as IDApprovalManager, Ler.IDStatus, Ler.leaManagerNote FROM leaveRequest Ler WHERE Ler.IDUser = ISNULL(@IdUser, Ler.IDUser) AND Ler.IDLeaveType = ISNULL(@IdLeaveType, Ler.IDLeaveType) AND Ler.leaFromDate >= @DateStart AND Ler.leaTODate <= @DateEnd AND Ler.IDStatus = ISNULL(@IdStatus, Ler.IDStatus) AND ((Ler.IDApprovalManager = ISNULL(@IdApprovalManager, Ler.IDApprovalManager)) or (@IdApprovalManager is null and Ler.IDApprovalManager is null)) -- Insert statements for procedure here ELSE exec ('SELECT Ler.IDLeaveRequest, Ler.IDUser, Ler.IDLeaveType, dbo.DataToString(Ler.leaFromDate) as leaFromDate, dbo.DataToString(Ler.leaTODate) as leaToDate, Ler.leaAmount, Ler.leaAmountBaseUnit, Ler.leaReason, Ler.leaContactAddress, Ler.leaContactPhone, Ler.leaApproval, isnull(Ler.IDApprovalManager, -1) as IDApprovalManager, Ler.IDStatus, Ler.leaManagerNote FROM leaveRequest Ler WHERE Ler.IDUser = ISNULL(' + @IdUser + ', Ler.IDUser) AND Ler.IDLeaveType = ISNULL(' + @IdLeaveType + ', Ler.IDLeaveType) AND Ler.leaFromDate >= ' + @DateStart + ' AND Ler.leaTODate <= ' + @DateEnd + ' AND Ler.IDStatus = ISNULL(' + @IdStatus + ', Ler.IDStatus) AND ((Ler.IDApprovalManager = ISNULL(' + @IdApprovalManager + ', Ler.IDApprovalManager)) or (' + @IdApprovalManager + ' is null and Ler.IDApprovalManager is null)) AND Ler.IDUser IN (' + @query + ') ' ) END

come si può vedere ci sono due select che all'intyerno ci sono dei parametri, tra questi parametri ci sono due date che nella prima query li esegue e di conseguenza funziona nella seconda racchiusa tra apici, mi dà errore nelle date e più precisamente in una data del tipo 1900-01-01 mi dice Incorrect Syntax near '1'

non riesco a capire dove sta l'errore.

Spero mi possiate aiutare!
Grazie

alx_81 Profilo | Guru

>Salve sto uscendo pazzo con una store procedure, vi prego aiutatemi,
Spiegaci prima cosa fanno la StringToDate e la DateToString..

>Grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

sanfra Profilo | Junior Member

Ciao, innanzitutto grazie tante per il tuo interessamento ,visto che sono veramente disperato!

allora ti posto anche il codice delle due Function da te richieste:

Questa fa la conversione da Data a varchar:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e questa è l'alòtra:
ALTER FUNCTION [dbo].[StringToData] ( @Appo varchar(20) ) RETURNS datetime AS BEGIN DECLARE @Data datetime SET @Appo = Substring(@Appo,1,4) + '-' + Substring(@Appo,5,2) + '-' + Substring(@Appo,7,2) + ' ' + Substring(@Appo,9,2) + ':' + Substring(@Appo,11,2) + ':' + Substring(@Appo,13,2) SET @Data = convert(datetime, @Appo, 120) -- Return the result of the function RETURN @Data END

Comuqnue se io nella seconda select commento le due date mi funziona perfettamente, è nelle date della seconda select che mi dà Incorrect Syntax near '1' e questo 1 fa riferimento alla prima data cioè @DataStart al secondo 1 e cioè al giorno. perchè la data che imposta di default è 1900-01-01 00:00:00
Grazie e spero di risolverla insieme a Voi!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5