' CONCAT '는 인식되는 내장 함수 이름이 아닙니다.
On 2월 17, 2021 by admin클라이언트가 SQL Server 2012에서 실행 중이라고보고했으며 최종 제공 전에 테스트를 위해 몇 가지 테스트 쿼리를 제공했지만 다음과 같이했습니다.
” CONCAT 은 인식 된 내장 함수 이름이 아닙니다.
CONCAT()
가 새로 빌드 된 것임을 이해합니다. SQL Server 2012에 도입 된 -in 함수는 모두 괜찮습니다. 그러나 “쿼리를 실행하는 사용자가 실행할 수있는 Transact-SQL 권한이 없을 수 있습니다.”라는 이름으로이 2008R2가 호환되도록 변경 사항을 롤백하라는 요청을 받았습니다. . ” 그래서 저는 클라이언트가 PROD에서와 다른 버전의 SQL Server를 DEV에 설치했을 가능성이 가장 높다는 점을 증명하고 있습니다.
기본 제공 스칼라 값 함수에 대한 권한이 있지만 가능하며, 그렇다면 사용자에게 여전히 동일한 오류 텍스트가 표시됩니까?
설명
Answer
CONCAT
가 도입되었습니다. SQL Server 2012에서는 SQL Server 2008 R2에서 작동하도록 만들 수 없습니다. 출처 : 문서 :
또한 호환성 수준이 있더라도 2012 년 이후에는 실패하게 만들 방법이 없습니다. 따라서 사람들이 두 서버에서 SELECT @@VERSION;
를 확인하도록하십시오. CONCAT
가 실패하면 < 11. 코드가 이전 버전과 호환되도록하려면 다음이 필요합니다. 표준 문자열 연결 연산자 (+
)를 사용합니다. 항상 동일한 수의 입력 문자열 및 CONCAT()
대신 dbo.CONCAT()
를 사용하도록 코드를 변경합니다 (중요한 시나리오가있을 것입니다. 함수가 네이티브가하지 않는 작업을 수행하는 경우 업그레이드 할 때 일관된 동작을 원합니다. 따라서 이러한 접근 방식을 권장하지 않습니다. NULL
처리 및 기타 사소한 변경 사항을 추가해야 할 수도 있습니다 (기존 스크립트를 정확하게 변경하는 방법을 알려주기 어렵습니다. 참조).
댓글
- 감사합니다, Aaron. CONCAT ()는 SP_ExecuteSQL 동적 SQL 호출 전에 일부 문자열을 함께 결합하는 데 사용되기 때문에 코드를 변경하기가 쉽습니다. SQL Server 2012에서 CONCAT () 사용에 대한 액세스를 거부 할 수있는 방법이 없다는 것을 확인하고 싶었습니다.
- @beeks ' 사용자의
CONCAT()
사용을 거부하는 방법은 없습니다. 하지만 저는 ' 2008 R2에서 코드가 작동하도록하기 위해 수행해야하는 작업에 어떤 영향을 미치는지 잘 따르지 않습니다. 추가가 아닌 제거CONCAT()
가 필요합니다. - 예, 코드를 2008 R2와 호환되도록 만드는 방법을 이해합니다. 사소합니다. 이 기능에
DENY
액세스 할 수 없음을 확인해 주셔서 감사합니다. - 연결을 + you로 변경할 때주의해야합니다. ' 연결되는 값이 시작될 문자열인지 확인해야합니다. 숫자 필드가있는 경우 추가를 시도합니다 (문자열이 int가 아니기 때문에 실패). 숫자 필드 (유형)가있는 경우 먼저 문자열로 변환 / 캐스트하십시오.
Answer
다음과 같은 ODBC CONCAT 함수를 사용할 수 있습니다. :
SELECT {fn CONCAT("foo ", "test") }
문제는이 함수가 두 개의 매개 변수 만 허용한다는 것입니다. 한 번에. 따라서 다음과 같이 두 개 이상을 사용하지 않으려는 경우 :
SELECT {fn CONCAT("foo ", {fn CONCAT("test ", "buddy")}) }
“+”연산자를 사용하십시오.
SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;