programing

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

mailnote 2023. 7. 10. 22: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
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

글로벌 임시 테이블을 포함하려는 경우 ## 라인을 제거할 수 있습니다.

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 Profiler를 사용하여 실행 중인 SQL을 추적할 수 있습니다.

[이 문서들은 2000년 이후 버전의 SQL Server를 대상으로 하지만 대부분의 권장 사항은 동일합니다.]

비즈니스에 중요한 긴 프로세스가 있는 경우 프로세스에서 다양한 단계(단계 이름/번호, 시작 및 종료 시간)를 기록하는 것이 좋습니다.이렇게 하면 상황이 제대로 수행되지 않을 때 비교할 기준이 마련되어 문제의 원인이 되는 단계를 보다 신속하게 파악할 수 있습니다.

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

반응형