이 SP를 실행하면 다음
메시지 가 표시됩니다. Msg 241, Level 16, State 1, Procedure PED_SP_PED_Updates, Line 22 Conversion failed when converting date and / or time from string string.
실행은 다음과 같습니다.
exec dbo.ped_sp_ped_updates
@CURRENTHICN='111111111A',
@DATERECEIVED = '20140904',
@FIELDTOBECHANGED='FIRST_NAME_MEMBER',
@CURRENTFIELDVALUE = 'MARY',
@NEWFIELDVALUE = 'MARYTEST',
@REQUESTEDBY = 'IPISORS',
@ID=156
왜 그런지 모르겠습니다. 비교를 위해 varchar를 날짜로 다시 캐스팅하고 있습니다.
참고하시기 바랍니다 , 나는 아무 문제가 그것을 할 수있는 더 좋은 방법을 말한 적이되고있다, 그러나 그것은 내가 할 수 있다면, 내 학습 (내가 생각하는) 더 도움이 될 적어도 '도'왜 내 현재 시저의 ISN에 관한 직접적인 답변을 얻을 것이다 작동하지 않습니다. 다른 것, 더 나은 것 등을 수행해야하는 이유에 대한 유용한 아이디어 외에도.
ALTER PROCEDURE [dbo].[PED_SP_PED_Updates]
@CurrentHicn VARCHAR(500),
@DateReceived VARCHAR(20),
@FieldToBeChanged VARCHAR(500),
@CurrentFieldValue VARCHAR(500),
@NewFieldValue VARCHAR (500),
@RequestedBy VARCHAR(10),
@ID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @CurrentDBNote VARCHAR(MAX)
DECLARE @NewNote VARCHAR(MAX)
DECLARE @CountofHicn INT
SET @NEWNOTE = 'Isaac Pisors | ' + GetDate() + ' | '
+ 'Changing field: ' + @FieldToBeChanged + ' from ' + @CurrentFieldValue + ' to ' + @NewFieldValue
+ ', per ' + @RequestedBy + ' request. Also changing any related DOCS/FAXES records to correspond'
SET @CurrentDBNote=
(SELECT NOTES_GENERAL FROM PED_APPLICATIONS WHERE HICN_MEDICARE_NUMBER=@CurrentHicn AND (Cast(ISNULL(DATE_RECEIVED,'1900-01-01') as DATE)=CAST(@DateReceived AS DATE)))
--NOW ADD THE TWO:
SET @NewNote = @CurrentDBNote + CHAR(13) + @CurrentDBNote
--SEE IF THERE IS STILL A MATCHING RECORD
SET @CountofHicn=
(SELECT COUNT(*) FROM PED_APPLICATIONS WHERE HICN_MEDICARE_NUMBER=@CurrentHicn AND (CAST(ISNULL(DATE_RECEIVED,'1900-01-01') AS DATE)=CAST(@DateReceived AS DATE)))
IF @CountofHicn=0 --THERE IS NO LONGER A MATCHING RECORD - INSERT THAT NOTE AND CALL IT A DAY
BEGIN
UPDATE PED_PEDUPDATES SET COMPLETEDON=GetDate(), COMPLETEDBY='SSIS',
EXCEPTIONNOTE='Could not locate any records where HICN is ' + @CurrentHicn + ' and Date Received is ' + CAST(@DateReceived AS VARCHAR)
WHERE [ID]=@ID
END
ELSE --GO AHEAD AND DO THE UPDATE
BEGIN
UPDATE PED_APPLICATIONS SET @FieldToBeChanged = @NewFieldValue
WHERE HICN_MEDICARE_NUMBER=@CurrentHicn AND (CAST(ISNULL(DATE_RECEIVED,'1900-01-01') AS DATE)=CAST(@DateReceived AS DATE))
END
IF @FieldToBeChanged='HICN_MEDICARE_NUMBER' --THEN WE HAVE TO UPDATE DOCS TABLE, TOO
BEGIN
UPDATE PED_DOCS SET HICN_MEDICARE_NUMBER=@NewFieldValue
WHERE
(HICN_MEDICARE_NUMBER=@CurrentFieldValue AND (CAST(ISNULL(DATE_RECEIVED,'1900-01-01') AS DATE)=@DateReceived)) or
(HICN_MEDICARE_NUMBER=@CurrentFieldValue AND DATE_RECEIVED IS NULL)
END
IF @FieldToBeChanged='HICN_MEDICARE_NUMBER' --THEN OUR WHERE CLAUSE-HICN IS THE *NEW* HICN
BEGIN
UPDATE PED_APPLICATIONS SET NOTES_GENERAL=@NewNote
WHERE HICN_MEDICARE_NUMBER=@NewFieldValue AND (CAST(ISNULL(DATE_RECEIVED,'1900-01-01') AS DATE)=CAST(@DateReceived AS DATE))
END
ELSE --ELSE OUR WHERE CLAUSE-HICN IS THE *OLD* HICN
BEGIN
UPDATE PED_APPLICATIONS SET NOTES_GENERAL=@NewNote
WHERE HICN_MEDICARE_NUMBER=@CurrentHicn AND (CAST(ISNULL(DATE_RECEIVED,'1900-01-01') AS DATE)=CAST(@DateReceived AS DATE))
END
--FINALLY, UPDATE RECORD AS COMPLETE:
UPDATE PED_PEDUPDATES SET COMPLETEDON=GetDate(),COMPLETEDBY='SSIS' WHERE [ID]=@ID
END
GO
단기 수정
대신 CAST(@DateReceived AS DATE)
, 사용CONVERT(date, @DateReceived, 112)
값 112는 yyyymmdd
사용중인 형식화 된 varchar 의 스타일 코드입니다 . 자세한 내용은 캐스트 및 변환 문서 를 참조하십시오.
또한 DATE_RECEIVED
테이블 열의 모든 값 이 올바른 형식인지 확인해야합니다. 변환 할 수없는 값이 하나라도이 오류가 발생합니다.
적절한 수정
@DateReceived
date
대신으로 프로 시저에 전달되어야합니다 varchar
.
DATE_RECEIVED
테이블에 필드가되어야 선언 A와 date
대신의 varchar
.
일반적으로 해당 목적을위한 기본 유형이있는 경우 데이터베이스에서 날짜 또는 시간을 문자열로 처리하지 마십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다