DB 관련

[MsSQL] ...(으)로 시작하는 식별자이(가) 너무 깁니다. 최대 길이는...

DevReff 2024. 12. 27. 08:00




728x90
반응형

프로시져에 넘어가는 파라메터의 길이가 길어서 발생하는 오류이다.

해결방법은 프로시져 실행하기 전에 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 관련:티스토리]