uso - diferencia entre datetime vs smalldatetime sql server
¿Cómo imprimir la variable DateTime en el método RAISERROR? (2)
Mi procedimiento almacenado acepta dos parámetros @EffectiveStartDate DATETIME
@EffectiveEndDate DATETIME
Escribí el código de validación así:
IF(@EffectiveStartDate > @EffectiveEndDate)
BEGIN
RAISERROR (''SPName: InsertUpdateLiquidityDateRule: Start Date: %s cannot be greater than End Date %s'',11,1,CAST(@EffectiveStartDate AS varchar(30)),CAST(@EffectiveEndDate AS varchar(30)));
RETURN -1
END
¿Puedo saber qué estoy haciendo mal aquí?
Al compilar mi SProc, apareció el mensaje ''Sintaxis incorrecta cerca de CAST ()''
El valor suministrado debe ser una constante o una variable. No puede especificar un nombre de función como un valor de parámetro. (desde MSDN Executing Stored Procedures ).
Debes hacer algo como esto:
declare @EffectiveStartDateText varchar(30)
set @EffectiveStartDateText = cast(@EffectiveStartDate as varchar)
declare @EffectiveEndDateText varchar(30)
set @EffectiveEndDateText = cast(@EffectiveEndDate as varchar)
RAISERROR (
''SPName: InsertUpdateLiquidityDateRule: Start Date: %s cannot be greater than End Date %s'',
11,
1,
@EffectiveStartDateText,
@EffectiveEndDateText);
Solo estoy tratando de ayudar, aquí hay otro ejemplo. Puse esto en la declaración BEGIN CATCH después de mi BEGIN TRY.
Nota: Esto es muy similar al uso de una instrucción if.
BEGIN TRY --Do something. END TRY
BEGIN CATCH --Else en error hace esto. IMPRIMIR ''¡Problema encontrado! ''- Vaya, hubo un error - Se genera un error con los detalles de la excepción DECLARE @ErrMsg nvarchar (4000), @ErrSeverity int, @ErrLineNum int SELECT @ErrMsg = ERROR_MESSAGE (), @ErrSeverity = ERROR_SEVERITY (), @ErrLineNum = ERROR_LINE ()
RAISERROR(@ErrMsg, @ErrSeverity, 1, @ErrLineNum)
END CATCH