Nice programing

SQL Server의 모든 현재 임시 테이블 목록을 가져 오는 방법이 있습니까?

nicepro 2020. 12. 4. 20:37
반응형

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

전역 임시 테이블을 포함하려면 ## 줄을 제거 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/7075483/is-there-a-way-to-get-a-list-of-all-current-temporary-tables-in-sql-server

반응형