T-SQL에서의 PRINT 문
왜 T-SQL의 PRINT 문장이 가끔만 작동하는 것 같습니까?어떤 제약이 있습니까?결과 집합이 생성되면 늘 함수가 될 수 있습니다. 결과 집합이 손상되지 않도록 해야 한다고 생각했지만, 행 수 등 다른 결과 집합으로 출력되지 않을 수 있습니까?
그렇다면 다음과 같은 문장이 있으면 '인쇄' 결과가 나오지 않는다는 말씀이신가요?
sysobjects에서 *를 선택합니다.인쇄 'Just selected * from sysobjects'
SQL Query Analyzer를 사용하는 경우 하단에 두 개의 탭이 있으며, 그 중 하나는 "메시지"이고, 이 탭에는 "인쇄" 문이 표시됩니다.
인쇄문을 볼 타이밍이 궁금하다면 다음과 같은 방법을 사용해 보십시오.
raiderror ('My Print Statement', 10,1) (nowait 포함)
이렇게 하면 대부분의 경우 Query Analyzer가 처리하듯이 출력에 버퍼링하지 않고 스테이트먼트에 도달하는 즉시 메시지가 나타납니다.
TSQL의 Print 스테이트먼트는 이름 때문에 오해를 받고 있습니다.실제로는 에러/메시지 처리 메커니즘에 메시지를 송신하고, 그 메커니즘이 발신측 어플리케이션으로 전송됩니다.PRINT는 꽤 멍청합니다.송신할 수 있는 것은, 8000 문자(4000 unicode 문자) 뿐입니다.리터럴 문자열, 문자열 변수(varchar 또는 char) 또는 문자열 식을 전송할 수 있습니다.RAIDERROR 를 사용하는 경우는, 2,044 문자의 문자열로 제한됩니다.단, 표준 C 라이브러리의 이전 printf와 유사한 포맷 기능을 호출하기 때문에 호출 응용 프로그램에 정보를 보내는 데 이 기능을 사용하는 것이 훨씬 쉽습니다.또한 텍스트 메시지 외에 오류 번호, 중대도 및 상태 코드를 지정할 수 있습니다.또한 sp_addmessage 시스템스토어드 프로시저를 사용하여 작성된 사용자 정의 메시지를 반환하기 위해서도 사용할 수 있습니다.메시지를 강제로 기록할 수도 있습니다.
메시지와 오류는 매우 비슷하지만 오류 처리 루틴은 메시지를 수신하는 데 전혀 도움이 되지 않습니다.물론 이 기술은 데이터베이스(OLBC, OLEDB 등)에 실제로 연결하는 방법에 따라 달라집니다.시스템 사용 시 SQL Server Database Engine에서 메시지를 수신하고 처리하려면 다음과 같이 하십시오.Data.SQLClient에서는 이벤트를 처리하는 메서드를 식별하는 SqlInfoMessageEventHandler 대리인을 생성하여 SqlConnection 클래스에서 InfoMessage 이벤트를 수신해야 합니다.중대도나 상태 등의 메시지콘텍스트 정보가 콜백에 인수로서 전달되는 것을 알 수 있습니다.이는 시스템 관점에서 이러한 메시지는 오류와 같기 때문입니다.
이러한 메시지를 파일로 스풀하고 있는 경우라도, 매우 불명확한 문제를 쫓으려고 할 때는 항상 이러한 메시지를 사용하는 것이 좋습니다.그러나 애플리케이션 내의 정보를 표시하는 정보 수준을 예약할 수 없는 한 최종 사용자가 이러한 정보를 볼 수 있도록 할 수는 없습니다.
Query Analyzer는 메시지를 버퍼링합니다.PRINT 문과 RAISERROR 문 모두 이 버퍼를 사용하지만 RAISERROR 문에는 WITH NOWAIT 옵션이 있습니다.메시지를 즉시 인쇄하려면 다음을 사용합니다.
RAISERROR ('Your message', 0, 1) WITH NOWAIT
RAISERROR는 메시지의 400자만 표시하고 텍스트 형식에 C printf 함수와 유사한 구문을 사용합니다.
WITH NOWAIT 옵션과 함께 RAISERROR를 사용하면 메시지 버퍼가 플러시되므로 이전에 버퍼링된 모든 정보도 출력됩니다.
최근에 우연히 이런 일을 겪었는데, 결국 늘 변수에 대한 변환 문이 있었기 때문입니다.그 때문에 에러가 발생하고 있기 때문에, 인쇄문 전체가 null로 렌더링 되어 인쇄가 전혀 되지 않았습니다.
예 - 이 작업은 실패합니다.
declare @myID int=null
print 'First Statement: ' + convert(varchar(4), @myID)
예 - 다음과 같이 인쇄됩니다.
declare @myID int=null
print 'Second Statement: ' + coalesce(Convert(varchar(4), @myID),'@myID is null')
출력에서 인쇄문을 찾을 수 없는 이 질문을 다른 사람이 읽을 수 있도록 실제로 인쇄가 실행되지만 클라이언트에 반환되지 않는 경우가 있습니다.그게 뭔지 정확히 말씀드릴 수는 없어요.go 스테이트먼트를 인쇄 스테이트먼트 바로 앞과 뒤에 넣으면 실행 여부를 알 수 있습니다.
출력된 인쇄문과 관련된 변수가 있습니까?만약 그렇다면, 변수가 값을 가지지 않으면 인쇄문이 출력되지 않는다는 것을 알게 되었습니다.
언급URL : https://stackoverflow.com/questions/268384/print-statement-in-t-sql
'source' 카테고리의 다른 글
Python - 각 목록의 네 번째 요소별로 목록을 정렬하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
---|---|
X시간보다 오래된 파일을 삭제하는 방법 (0) | 2023.04.22 |
Azure 함수에서 설정 읽기 (0) | 2023.04.22 |
WPF의 디자인 타임 전용 배경색? (0) | 2023.04.22 |
Swift에서 viewController 인스턴스화 및 표시 (0) | 2023.04.22 |