'CONCAT'는 인식 된 내장 함수 이름이 아닙니다.


24

클라이언트가 SQL Server 2012에서 실행 중이라고보고했지만 최종 배포 전에 테스트를 위해 몇 가지 테스트 쿼리를 제공했습니다.

'CONCAT'은 인식 된 내장 함수 이름이 아닙니다.

나는 이해 CONCAT()하는 새로운 내장 된 모든 괜찮 잘하지만 내가 쿼리를 실행하는 사용자하지 않을 수 있습니다 "의 모습에서이 2008R2 호환되도록 내 변화를 롤백 요청을받은 SQL 서버 2012에 도입 된 기능 실행할 Transact-SQL 권한이 있습니다. " 따라서 클라이언트가 PROD와 다른 버전의 SQL Server를 DEV에 설치했을 가능성이 가장 높습니다.

SELECT/EXECUTE내장 스칼라 값 함수에 대한 권한을 구체적으로 거부하는 방법에 대한 정보를 찾을 수 없지만 가능한 경우 사용자에게 여전히 동일한 오류 텍스트가 표시됩니까?


concat이 작동하지 않으면 다음을 시도하십시오SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
Nilachal Sethi

CONCAT은 10 진수 유형 concat (ID + '_'+ OtherID)를 지원하며 ID는 int 유형일 수 있습니다.
Zhang

이전 버전에서는이를 대신 사용하십시오.DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;
Jack Whittaker

답변:


21

CONCATSQL Server 2012에 도입되었습니다. SQL Server 2008 R2에서 작동시킬 방법이 없습니다. 에서 문서 :

여기에 이미지 설명을 입력하십시오

호환성 수준이 있어도 2012+에는 실패 할 수있는 방법이 없습니다. 따라서 직원들에게 SELECT @@VERSION;두 서버를 모두 확인하십시오 . 당신은 어디에서 찾을 수 있습니다 CONCAT이전 버전과 호환 코드, 당신은 표준 문자열 연결 연산자를 사용해야합니다하기 위해서는 <실패 그것이 11 ( +). 나는 당신이 항상 사용하지 않는 한, 스칼라 함수를 사용하여이 작업을 수행 할 방법을 모르는 정확한 입력 문자열의 같은 수 당신이 사용하는 코드를 변경 dbo.CONCAT()하는 대신 CONCAT()(함수 아무것도 않는 경우 거기에 중요한 시나리오가 될 더한 것 네이티브가하지 않으면 업그레이드 할 때 일관된 동작을 원합니다). 그래서 나는 그 접근법을 권장하지 않을 것입니다. 추가해야 할 수도 있습니다NULL 처리 및 기타 사소한 변경 (기존 스크립트를 볼 수없는 경우 기존 스크립트를 정확하게 변경하는 방법을 알려줄 수 없음).


고마워, 애런 CONCAT ()는 SP_ExecuteSQL 동적 SQL 호출 전에 일부 문자열을 결합하는 데 사용되기 때문에 코드를 변경하는 것은 쉽지 않습니다. 난 정말 그냥 SQL 서버 2012 년 CONCAT ()를 사용하여 액세스를 거부 할 NO 방법이 있었다는 것을 확인 원
beeks

1
@beeks 나는 사용자의 사용 능력을 거부하는 방법을 모른다 CONCAT(). 그래도 2008 R2에서 코드를 작동시키기 위해해야 ​​할 일에 어떤 영향을 미치는지 잘 모르겠습니다. 추가하지 말고 제거 해야 CONCAT()합니다.
Aaron Bertrand

1
예, 코드를 2008 R2와 호환 가능하게 만드는 방법을 이해합니다. DENY이 기능에 액세스 할 수 없음을 확인해 주셔서 감사 합니다.
beeks

연결을 +로 변경할 때 연결하는 값이 문자열인지 확인해야합니다. 숫자 필드가 있으면 추가하려고 시도하고 문자열이 int가 아니기 때문에 실패합니다. 숫자 필드 (유형)가 있습니다. 먼저 문자열로 변환 / 캐스트하십시오.
Ste Bov

3

다음과 같이 ODBC CONCAT 기능을 사용할 수 있습니다.

SELECT {fn CONCAT('foo ', 'test') }

이것의 문제점은이 기능이 한 번에 두 개의 매개 변수 만 허용한다는 것입니다. 따라서 다음과 같이 둘 이상을 사용하지 않으려는 경우 :

SELECT {fn CONCAT('foo ', {fn CONCAT('test ', 'buddy')}) }

'+'연산자를 사용할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.