만든 tempdb 데이터베이스를 참조하지 않고 세션에서 특정 임시 테이블을 만들었는지 여부를 확인하는 방법이 있습니까? 사용자는 로그인 할 때 특정 tempdb에 할당되므로 어떤 tempdb를 사용할 지 알 수 없습니다.다중 tempdb 환경에서 임시 테이블이 있는지 테스트하고 있습니까?
임시 테이블에서 데이터를 선택하기 위해 tempdb를 지정할 필요가 없으므로 테이블이 있는지 확인할 수 있습니다.
만든 tempdb 데이터베이스를 참조하지 않고 세션에서 특정 임시 테이블을 만들었는지 여부를 확인하는 방법이 있습니까? 사용자는 로그인 할 때 특정 tempdb에 할당되므로 어떤 tempdb를 사용할 지 알 수 없습니다.다중 tempdb 환경에서 임시 테이블이 있는지 테스트하고 있습니까?
임시 테이블에서 데이터를 선택하기 위해 tempdb를 지정할 필요가 없으므로 테이블이 있는지 확인할 수 있습니다.
여기에 임시 테이블을 사용해서는 안되는 것 같습니다.이 테이블은 일반 테이블 (사용자 식별자가있는 테이블)과 비슷합니다. 여기 시나리오는 무엇입니까?
이렇게 임시 테이블을 사용하면 최적화 프로그램/쿼리 캐시가 손상 될 수 있습니다. #FOO의 의미가 호출마다 변경되므로 많은 재 컴파일이 필요합니다.
당신은 OBJECT_ID를 사용하여 임시 객체의 존재 여부를 확인할 수 있습니다
SELECT object_id('#tmpTable')
당신은 당신이 원하는 경우에 사용되는 tempdb를 지정할 수 있습니다,하지만 당신은 필요가 없습니다에 :
SELECT object_id('tempdb..#tmpTable')
너무,이 또한 전역 임시 테이블 작동하는지 주목할 필요가 :
SELECT object_id('##tmpTable')
으로 마지막에 DROP TABLE을 수행 할 필요없이 스크립트를 재실행 가능하도록 만든다. 임시 테이블을 만들기 전에 항상 체크와 드롭을한다. 나는 종종 SQL 코드를 만들 때 테이블을 남겨 둡니다.
IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
id int,
col1 varchar(100)
)
레거시 애플 리케이션과 미친 요구 사항 (일반 테이블을 포함하지 않음)은 모두 설명하기에는 복잡합니다. 기본적으로 임시 테이블을 생성하고 (즉시 실행을 통해) 저장 프로 시저를 사용하여 응용 프로그램을 채우는 응용 프로그램이 필요합니다. 그런 다음 응용 프로그램을 테이블에서 읽게하십시오. WTF. – ninesided
그런 경우, 내가 제안 할 수있는 가장 좋은 방법은 테이블에서 SELECT를 시도하고 barfs인지 확인하는 것입니다! 죄송합니다 ... –
고마워, 그 순간에 내가하고있는 일이지만, 조금 비 효과적이라고 느껴. – ninesided