line1 SELECT 'A'
line2 SELECT CONCAT(a,b);
line3 SELECT 'B'
는 SQL Server 2008의이을 시도하고 line1
인해 SQL 서버는 다음 line1
가 성공적으로 봤는데해야 할 절차 적 프로그래밍의 경우 일괄 라인 2. 실패에 조회되지 않습니다 발견 질문이 맞습니까?T-SQL 절차 적 프로그래밍
line1 SELECT 'A'
line2 SELECT CONCAT(a,b);
line3 SELECT 'B'
는 SQL Server 2008의이을 시도하고 line1
인해 SQL 서버는 다음 line1
가 성공적으로 봤는데해야 할 절차 적 프로그래밍의 경우 일괄 라인 2. 실패에 조회되지 않습니다 발견 질문이 맞습니까?T-SQL 절차 적 프로그래밍
이유는 당신이 컴파일 타임 오류가 아닌 실행 시간을 볼 수 있다는 것입니다. Here은 그 차이점을 밝힐 수있는 몇 가지 예입니다.
데이터베이스 엔진이 컴파일 타임 오류가 발생
은 전체 배치는 전혀 실행되지 않으며, 코드는 하나의 배치를 포함한다. 그래서 결과가 표시되지 않습니다. 그러나이 문을go
(SSMS, sqlcmd 또는이를 인식하는 다른 클라이언트)으로 구분하면 두 번째 문만 건너 뜁니다.
SELECT 'A'
T-SQL에서 유효하며 열 머리글이없는 결과로 A가 표시됩니다. 그러나 쿼리가 하지라는 참조를 만들 않는 기능을 간단하게 사용할 수 없기 때문에이 작동하지 않습니다 SQL 2008 년 A.
SELECT CONCAT(a,b);
의 값을 보관 유지하는가. 이 행은 세미콜론으로 끝납니다. 단 하나의 선행하는 코드 행은 지속적인 참조를 생성하지 않으므로 a 나 b가 존재하지 않습니다. SQL 2008에서
SELECT a + b;
이 작동 할 수 있습니다 (가 경우 A와 B가 모두 존재하고 있었다 문자열)
SELECT 'B'
는 T-SQL에서 유효합니다, 그것은 말 그대로 결과로 B를 표시합니다 열 머리글 없음. 그러나 쿼리는 하지 이후에 참조하기위한 어떤 이름의 값을 제공하지 않습니다
SELECT 'A'
간단한에서 B. 의 가치를 보유하고 B라는 참조를 생성한다.
SELECT 'B'
은 나중에 참조 할 B의 값을 제공하지 않습니다. DECLARE @a AS VARCHAR(10)
DECLARE @b AS VARCHAR(10)
SET @a = 'A'
SET @B = 'B'
SELECT @a + @b
;
다른 접근법 :
select a + b
from (select 'A' as a, 'B' as b) as derived
여기 파생 테이블의 열 A 및 B의 별칭을 부여
T-SQL은 다음 허용하지 이것은 outer select 절에서 참조되어 연결을 수행 할 수 있습니다. 관찰 된 행동
SQL은 절차 적 언어가 아닙니다 ... 선언적 언어입니다. 그것은 언어의 기본 기본 개념 중 하나입니다 ... 또한, SQL Server를 사용하는 경우에는 그 내용이 모두 인쇄되어야합니다.a & b에 작은 따옴표가 없으면 잘못된 열 이름 오류가 발생합니다. –
http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/ (특히 "파싱 및 편집"부분)을 읽는 것이 도움이 될 수 있습니다. 기본적으로 문을 구문 분석 할 때 오류가 발생하면 문에서 아무 것도 실행하지 않습니다. – ZLK
이 링크는 도움이 될 수 있습니다. https://stackoverflow.com/questions/2668529/what-is-a-batch-and-why-is-go-used. 특히 Quassnoi에서 대답하십시오. –