asp 프로그램에서 sp 함수로 DB내 sp로 데이터를 보내 업데이트 시키는 구조입니다.
에러메세지
1. asp(웹)에서는 데이터 및 이진데이터가 잘립니다.라고 나오구
2. DB내에서 바로 값 넣어서 테스트 해본 결과 최대길이 128을 초과하였습니다. 라고 나옵니다.
이번에 한 컬럼의 크기를 varchar(300)에서 varchar(1500)으로 변경하고
이 컬럼에 들어가는 값은
다음에서 정하는 것 이외의 보존료가 검출되어서는 아니된다. 0.5 이하 소르빈산으로서 1.0 이하 안식향산으로서 소르빈산으로서 및 안식향산으로서 병용할 때에는 사용량의 합계가 1.5g/kg 이하 이어야 하며 그 중 소르빈산으로서의 사용량은 0.5g/kg이하 이어야 한다
입니다.
영문 1바이트로 계산했을 대 대략 340이 넘고, 한글로 계산하면 대략 170정도 되겠네요..
에러메시지 1의 경우 검색해본 결과 컬럼 크기랑 맞지 않아 오류다 라는 답변들이 많고,
2의 경우 set QUOTED_IDENTIFIER ON <<< 이 옵션을 OFF로 하면 된다라고 해서
SSMS로 접속 후 해당 SP>오른쪽마우스클릭>수정으로 들어가서 위의 옵션을 OFf로 하고 실행(F5)로 명령수행한 후
다시 테스트 해보니 그래도 같은 오류메세지가 뜨더군요...
더 검색해본 결과 도구>옵션>쿼리결과 에서 각 열에 표시할 최대 문자 수가 256으로 되어 있어서 이걸 512로
바꿔 적용시켰습니다.
그리고, 다시 테스트... 같은 오류 메세지가 뜨네요...
아이공.... 이 오류로 인해 너무 오래 알아보는데도 해결책이 보이지 않네요...
우선 asp 내 sp 함수 내용을 올려봅니다.
Function UpdateAnalysisResultInfo_Test(analysis_idx,report_result_kor,report_result_eng,test_method,judge,file_name,result_input_user_id,exam_value)
Set objCmd = Server.CreateObject("ADODB.Command")
with objCmd
.ActiveConnection = conn
.CommandText = "sp_UpdateAnalysisResultInfo_Test"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@analysis_idx",adInteger,adParamInput)
.Parameters.Append .CreateParameter("@report_result_kor",adVarchar,adParamInput,100)
.Parameters.Append .CreateParameter("@report_result_eng",adVarchar,adParamInput,100)
.Parameters.Append .CreateParameter("@test_method",adVarchar,adParamInput,200)
.Parameters.Append .CreateParameter("@judge",adTinyInt,adParamInput)
.Parameters.Append .CreateParameter("@file_name",adVarchar,adParamInput,100)
.Parameters.Append .CreateParameter("@result_input_user_id",adVarchar,adParamInput,20)
.Parameters.Append .CreateParameter("@exam_value",adVarchar,adParamInput,1500) ' 이넘이 바뀐 컬럼
.Parameters("@analysis_idx") = analysis_idx
.Parameters("@report_result_kor") = report_result_kor
.Parameters("@report_result_eng") = report_result_eng
.Parameters("@test_method") = test_method
.Parameters("@judge") = judge
.Parameters("@file_name") = file_name
.Parameters("@result_input_user_id") = result_input_user_id
.Parameters("@exam_value") = exam_value
.Execute
End with
Set objCmd = Nothing
End Function
이 함수로 값을 보내는 코드는
if(analysis_idx <> "") then
analysis_idx_name = "analysis_info_"&i
report_result_eng_name = "report_result_eng_"&i
report_result_kor_name = "report_result_kor_"&i
test_method_name = "test_method_"&i
judge_name = "judge_"&i
exam_value_name = "exam_value_"&i
chk_toggle_name = "chk_toggle"&i '파일삭제 checkbox
sub_idx ="sub_idx_"&i
'analysis_idx = Trim(xup(analysis_idx_name))
file_temp_name ="file_temp_"&i&"_"&analysis_idx
report_result_kor = Trim(xup(report_result_kor_name))
report_result_eng = Trim(xup(report_result_eng_name))
test_method = Trim(xup(test_method_name))
judge = Trim(xup(judge_name))
exam_value = Trim(xup(exam_value_name))
chk_toggle = Trim(xup(chk_toggle_name))
file_name = arrNoteFile(i-1)
sub_idx = Trim(xup(sub_idx))
file_temp = Trim(xup(file_temp_name))
if(chk_toggle <> "") then 'check 표시가 되어 있으면
DeleteAnalysisFile analysis_idx,file_temp
end if
report_result_eng = TransEngResult(report_result_kor)
UpdateAnalysisResultInfo_Test analysis_idx,report_result_kor,report_result_eng,test_method,judge,file_name,result_input_user_id,exam_value
end if
이 부분입니다.
그리고, DB 내 SP 코드는
set ANSI_NULLS ON
set QUOTED_IDENTIFIER OFF
GO
ALTER proc [dbo].[sp_UpdateAnalysisResultInfo_Test]
@analysis_idx int
, @report_result_kor varchar(100)
, @report_result_eng varchar(100)
, @test_method varchar(200)
, @judge tinyint
, @file_name varchar(100)
, @result_input_user_id varchar(20)
, @exam_value varchar(1500)
as
declare @trimed_file_name varchar(100)
set @trimed_file_name = RTrim(LTrim(@file_name))
if(@trimed_file_name != '')
Begin
Update ILIMS_ANALYSIS
set report_result_kor = @report_result_kor
, report_result_eng = @report_result_eng
, test_method = @test_method
, judge = @judge
, file_name = @file_name
, decesion_yn = 'Y'
, judge_date = getdate()
, result_input_date = getdate()
, result_input_user_id = @result_input_user_id
, exam_value = @exam_value
where idx = @analysis_idx
end
else
begin
Update ILIMS_ANALYSIS
set report_result_kor = @report_result_kor
, report_result_eng = @report_result_eng
, test_method = @test_method
, judge = @judge
, decesion_yn = 'Y'
, judge_date = getdate()
, result_input_date = getdate()
, result_input_user_id = @result_input_user_id
, exam_value = @exam_value
where idx = @analysis_idx
end
입니다.
풀어보면...asp 페이지에서 input으로 넘어온 값을 함수 sp를 통해 DB내 sp로 값을 보내 쿼리를 실행하는 구조인데요...
문제의 컬럼 값
다음에서 정하는 것 이외의 보존료가 검출되어서는 아니된다. 0.5 이하 소르빈산으로서 1.0 이하 안식향산으로서 소르빈산으로서 및 안식향산으로서 병용할 때에는 사용량의 합계가 1.5g/kg 이하 이어야 하며 그 중 소르빈산으로서의 사용량은 0.5g/kg이하 이어야 한다
에서
다음에서 정하는 것 이외의 보존료가 검출되어서는 아니된다. 0.5 이하 소르빈산으로서 1.0 이하 안식향산으로서 소르빈산으로서 및 안식향산으로서 병용할 때에는 사용량의 합계가 1.5g/kg 이하 이어야 하며 그 중
로 뒤의 값을 조금 삭제 후 실행하면 업데이트가 실행됩니다...
에효...
DB내 컬럼 크기 설정때문인지 원인을 못 찾고 있습니다...
고수님들...답변 바랍니다... 이거땜에 미치고 있어염....ㅜ.ㅜ |