프로시져에 넘어가는 파라메터의 길이가 길어서 발생하는 오류이다.
해결방법은 프로시져 실행하기 전에 SET QUOTED_IDENTIFIER OFF 를 실행하면 된다.
예제)
/****** Object: StoredProcedure [dbo].[SPP_Data_INSERT] Script Date: 2016-07-29 오후 6:44:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
-- =============================================
-- Author: jwcho
-- Create date: 2016.07.28
-- Modify date: 2016.07.28
-- Description: 테이블에 데이터를 추가한다.
-- 주의사항:
-- =============================================
ALTER PROCEDURE [dbo].[SPP_Data_INSERT]
@V_TABLE VARCHAR(50)=NULL, -- Table name
@V_FIELDS VARCHAR(3000)=NULL, -- 추가할 필드목록(구분자=콤마)
@V_VALUES VARCHAR(max)=NULL, -- 추가할 값목록(구분자=콤마)
@V_OUTPUT INT=1, -- 결과의 반환여부
@V_DEBUG INT=0
AS
BEGIN
SET NOCOUNT ON;
--print @V_FIELDS;
--print @V_VALUES;
declare @v_sql varchar(max);
declare @v_msg varchar(4098)='';
declare @v_return int=0;
--------------------------------------------------
-- 데이터 오류 체크
if dbo.FN_IsNull(@V_TABLE)=1 or dbo.FN_IsNull(@V_FIELDS)=1 or dbo.FN_IsNull(@V_VALUES)=1
begin
if @V_OUTPUT <> 0
begin
if @V_DEBUG=0
select -1 [RetVal], '코드가 올바르지 않습니다.' [Message], @V_TABLE [TABLENAME], @V_FIELDS [FIELDS];
else
print 'RetVal: -1, Message: 코드가 올바르지 않습니다.'
+(case when @V_TABLE is null then '' else ', [TABLENAME]: '+@V_TABLE end);
end
return
end
--------------------------------------------------
set @v_sql = 'insert into '+@V_TABLE+char(13);
set @v_sql = @v_sql+' ('+@V_FIELDS+') values'+char(13);
set @v_sql = @v_sql+' '+@V_VALUES;
begin try
if @V_DEBUG=0
execute (@v_sql);
else
print @v_sql;
if @V_OUTPUT <> 0
begin
set @v_return = 1;
set @v_msg += '성공적으로 추가되었습니다.'+char(13);
end
end try
begin catch
if @V_OUTPUT <> 0
begin
set @v_return = 0;
set @v_msg += convert(varchar,error_number())+':'+error_message()+char(13)+@v_sql+char(13);
end
end catch
if @V_OUTPUT <> 0
begin
if @V_DEBUG=0
select @v_return [RetVal], @v_msg [Message], @V_TABLE [TABLENAME], @V_FIELDS [FIELDS];
else
print 'RetVal: '+convert(varchar,@v_return)
+(case when @v_msg is null then '' else ', Message: '+@v_msg end)
+(case when @V_TABLE is null then '' else ', [TABLENAME]: '+@V_TABLE end);
end
END
출처: https://devdb.tistory.com/28 [DB 관련:티스토리]
'DB 관련' 카테고리의 다른 글
[MsSql] hierarchyid 를 사용한 계층구조 검색 (0) | 2024.12.27 |
---|---|
[Firebird] 계층적 데이터 쿼리 (0) | 2024.12.27 |
[MsSql] 실행계획 - 쿼리 튜닝 (0) | 2024.12.27 |
[MsSql] 캐시 제거 (0) | 2024.12.27 |
[MS-SQL]특정 칼럼명을 가진 테이블을 검색 (0) | 2024.12.27 |