반응형
이름이 올바른 식별자가 아니기 때문에 exec이 실패했습니까?
의미 있는 열 이름을 출력하려면 동적 쿼리로 실행해야 하는 쿼리가 있습니다.예를 들어 쿼리를 직접 실행하면 데이터가 올바르게 반환됩니다.그러나 아래 코드를 사용하면 다음과 같이 표시됩니다.
The name '
SELECT (CASE WHEN A.Domain IS NOT NULL THEN A.Domain ELSE B.Domain END) AS [Domain],
(CASE WHEN A.Email IS NOT NULL THEN A.Email ELSE B.Email END) AS [Email],
A.[Sender Size] AS [Sender Size 1], A.[Sender Count] AS [Sender Count 1],
A.[Receiver Size] AS [Receiver Size 1], A.[Receiver Count] AS [Receiver Count 1],
A.[Sender Size 2] AS [Sender Size 2], A.[Sender Count 2] AS [Sender Count 2],
A.[Receiver Size 2] AS [Receiver Size 2], A.[Receiver Count 2] AS [Receiver Count 2],
B.SenderSize AS [Sender Size Average], B.SenderCount AS [Sender Count Average],
B.ReceiverSize AS [Receiv' is not a valid identifier.
아래에 코드가 있습니다.
DECLARE @query NVARCHAR(4000)
SET @query = N'SELECT *
FROM
(
SELECT (CASE WHEN A.Domain IS NOT NULL THEN A.Domain ELSE B.Domain END) AS [Domain],
(CASE WHEN A.Email IS NOT NULL THEN A.Email ELSE B.Email END) AS [Email],
A.[Sender Size] AS [Sender Size 1], A.[Sender Count] AS [Sender Count 1],
A.[Receiver Size] AS [Receiver Size 1], A.[Receiver Count] AS [Receiver Count 1],
A.[Sender Size 2] AS [Sender Size 2], A.[Sender Count 2] AS [Sender Count 2],
A.[Receiver Size 2] AS [Receiver Size 2], A.[Receiver Count 2] AS [Receiver Count 2],
B.SenderSize AS [Sender Size Average], B.SenderCount AS [Sender Count Average],
B.ReceiverSize AS [Receiver Size Average], B.ReceiverCount AS [Receiver Count Average]
FROM
(
SELECT (CASE WHEN tf.Domain IS NOT NULL THEN tf.Domain ELSE tf2.Domain END) AS Domain,
(CASE WHEN tf.Email IS NOT NULL THEN tf.Email ELSE tf2.Email END) AS Email,
ISNULL(tf.SenderSize,0) AS [Sender Size] , ISNULL(tf.SenderCount,0) AS [Sender Count], ISNULL(tf.ReceiverSize,0) AS [Receiver Size], ISNULL(tf.ReceiverCount,0) AS [Receiver Count],
ISNULL(tf2.SenderSize,0) AS [Sender Size 2], ISNULL(tf2.SenderCount,0) AS [Sender Count 2], ISNULL(tf2.ReceiverSize,0) AS [Receiver Size 2], ISNULL(tf2.ReceiverCount,0) AS [Receiver Count 2]
FROM #TrafficFinal tf FULL JOIN #TrafficFinal2 tf2 ON (tf.Email = tf2.Email AND tf.Domain = tf2.Domain)
) A FULL JOIN #TrafficFinal3 B ON (A.Email = B.Email AND A.Domain = B.Domain)
) C
ORDER BY Domain, Email';
PRINT @query;
-- run it
exec @query;
완전 가입 때문인가요?
마지막에 대신 사용해 보십시오.
exec (@query)
괄호가 없는 경우 SQL Server는 변수 값을 저장 프로시저 이름으로 가정합니다.
OR
EXECUTE sp_executesql @query
그리고 그것은 완전한 가입 때문이 되어서는 안 됩니다.
하지만 이 전에 #TrafficFinal, #TrafficFinal2, #TrafficFinal3 등의 임시 테이블을 이미 생성하셨기를 바랍니다.
EXEC 사용과 sp_executesql 사용 사이에는 성능 고려 사항이 있습니다.sp_executesql은 sp처럼 강제 문 캐싱을 사용하기 때문입니다.
자세한 내용은 여기에 있습니다.
한편, 쿼리 조작을 하지 않고 그대로 실행하는 것을 고려하여 쿼리를 그대로 사용할 수 있을 때 이 경우에 동적 SQL을 사용하는 이유가 있습니까?
나의 경우와 마찬가지로, 만약 당신의 SQL이 연결되거나 변환을 사용하여 생성된다면, 실행 시 sql은 아래와 같이 문자 N으로 접두사를 붙여야 합니다.
예.
Exec N'Select bla..'
N은 문자열 리터럴을 유니코드로 정의합니다.
언급URL : https://stackoverflow.com/questions/11991987/exec-failed-because-the-name-not-a-valid-identifier
반응형
'programing' 카테고리의 다른 글
제약 조건이 0의 높이를 모호하게 제시하는 경우를 감지함 (0) | 2023.05.11 |
---|---|
WPF란 무엇이며 WinForms와 비교하면 어떻습니까? (0) | 2023.05.11 |
Azure App 서비스 메모리 사용량입니다.어디에서 전체 고장을 확인할 수 있습니까? (0) | 2023.05.06 |
Python 3.5에서 코루틴과 미래/작업의 차이점은 무엇입니까? (0) | 2023.05.06 |
git diff 도구, 직렬이 아닌 모든 diff 파일을 즉시 엽니다. (0) | 2023.05.06 |