SQL Server의 모든 현재 임시 테이블 목록을 가져 오는 방법이 있습니까?
임시 테이블이 세션 / 연결에 바인딩되어 있고 세션 / 연결에서 표시되거나 액세스 할 수 없다는 것을 알고 있습니다.
다양한 단계에서 임시 테이블을 만드는 장기 실행 저장 프로 시저가 있습니다.
현재 임시 테이블 목록을 볼 수있는 방법이 있습니까? 그렇게하려면 어떤 권한이 필요합니까?
또는
실행중인 저장 프로 시저 내에서 실행되는 특정 SQL 문을 볼 수있는 방법이 있습니까? 프로시 저는 SQL Server에서 예약 된 작업으로 실행됩니다.
SQL Server 2000을 사용하고 있습니다.
귀하의 안내에 감사드립니다.
이것이 당신이 추구하는 것입니까?
select * from tempdb..sysobjects
--for sql-server 2000 and later versions
select * from tempdb.sys.objects
--for sql-server 2005 and later versions
다음 쿼리를 통해 임시 테이블 목록을 가져올 수 있습니다.
select left(name, charindex('_',name)-1)
from tempdb..sysobjects
where charindex('_',name) > 0 and
xtype = 'u' and not object_id('tempdb..'+name) is null
SQL Server 2000의 경우 세션의 #temp 테이블 만 알려야합니다. ( 여기에있는 SQL Server의 최신 버전에 대한 내 예제 에서 수정되었습니다 .) 다음과 같이 연속 된 세 개의 밑줄로 테이블 이름을 지정하지 않는다고 가정합니다 CREATE TABLE #foo___bar
.
SELECT
name = SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1),
t.id
FROM tempdb..sysobjects AS t
WHERE t.name LIKE '#%[_][_][_]%'
AND t.id =
OBJECT_ID('tempdb..' + SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1));
임시 테이블 목록을 '보아야'하는 경우 사용 된 이름을 기록하기 만하면됩니다. (다른 사람들이 언급했듯이이 정보를 직접 쿼리 할 수 있습니다)
임시 테이블의 내용을 '보아야'하는 경우 (고유 한) 임시 이름으로 실제 테이블을 만들어야합니다.
SQL 프로파일 러를 사용하여 실행중인 SQL을 추적 할 수 있습니다.
[이 기사는 2000 년 이후의 SQL Server 버전을 대상으로하지만 대부분의 조언은 동일합니다.]
비즈니스에 중요한 긴 프로세스가있는 경우 프로세스의 다양한 단계 (단계 이름 / 번호, 시작 및 종료 시간)를 기록하는 것이 좋습니다. 이렇게하면 일이 잘 수행되지 않을 때 비교할 기준을 확보하고 문제를 더 빨리 유발하는 단계를 정확히 찾아 낼 수 있습니다.
SELECT left(NAME, charindex('_', NAME) - 1)
FROM tempdb..sysobjects
WHERE NAME LIKE '#%'
AND NAME NOT LIKE '##%'
AND upper(xtype) = 'U'
AND NOT object_id('tempdb..' + NAME) IS NULL
전역 임시 테이블을 포함하려면 ## 줄을 제거 할 수 있습니다.
'Nice programing' 카테고리의 다른 글
배열 배열을 평면화하는 방법-끝까지 내려 가지는 않음 (0) | 2020.12.04 |
---|---|
Lisp 주석 규칙 (0) | 2020.12.04 |
GCC가 바쁜 대기 루프를 최적화하지 못하게하는 방법은 무엇입니까? (0) | 2020.12.04 |
Python simpleHTTPserver를 어떻게 종료합니까? (0) | 2020.12.04 |
grep "\\"XXFile을 사용하면 "Trailing Backslash"가 표시됩니다. (0) | 2020.12.04 |