Ok. Tu problema de hecho es muy común para quienes se inicián en SqlServer
Resulta que cuando manejas fechas estás pueden ser manejadas por Sql server de dos maneras diferentes, en formato americano (yyyy-dd-mm) o en formato europeo (yyyy-mm-dd). Esto provoca que si en el equipo donde ejecutas tu aplicación la configuración regional define el formato en dd/mm/yy
y la configuración en tu servidor sql está en mm/dd/yyy, cualquier paso de parámetros en formato datetime va a generar el problema que tu tienes.
La solución que implementamos en la empresa fué estandarizar el uso de los campos DateTime. Por ejemplo establecimos que cualquier sp o función que recibiera como parametros valores de fecha estos fueran convertidos a char con el formato 120, y de manera interna en el Sp o función hacemos la reconversión a formato datetime de Sql.
Lo que ganamos con esto es que sin importar la configuración de los equipos cliente nuestros sps y funciones siempre funcionarán.
Usando tu sp ejemplifico lo que hacemos
Código SQL
[-]
CREATE
PROCEDURE spDebitarCheque
(
@IdCheque int, --Define el Id del Cheque
@FechaDebito Char(10) --Define la fecha de débito del cheque (formato 120)
)
AS
Declare
@VDtFecDebito As DateTime --Almacena en formato DateTime la fecha del débito
--Con esto aseguras que sin importar la configuración de sql server
-- o del cliente el valor de fecha será traducido de manera satisfactoria
Set @VDtFecDebito = Convert(DateTime,@FechaDebito,120)
--Se inicia la transacción
Begin tran
UPDATE Cheque.dbo.Cheques
SET FechaDebito = @VDtFecDebito
WHERE IdCheque =@IdCheque
If @@ERROR <> 0
Begin
Rollback Tran
GoTo ErrorHandler
End
Commit Tran
Return
ErrorHandler:
--Tratamiento del error
ahora bíen desde tus aplicaciones deberas estandarizar de igual manera el paso del valor para que en todas sea de esta manera
Código Delphi
[-]
ADOSPDebCheque.Parameters.ParamByName('@FechaDebito').Value :=
FormatDateTime('yyyy-mm-dd',DTPFechaDebitoPanel.Date);
Y listo con eso te vas a ahorrar un millón de dolores de cabeza.
Mucha suerte