이것은 재미 있습니다. 갑자기 다른 버전의 데이터베이스 (외부 도구)에서 실행해야하는보기가 있습니다. 내가 뭘하고 싶지 정확히 하나의 쿼리를 가지고있다 (사례/IF 존재 또는 교차 조인 또는 당신이 가진 마법의 트릭의 어떤 방식을 사용).테이블 존재 여부에 관계없이 실행되는 쿼리 작성
기본적으로 주어진 테이블이 존재할 경우 해당 테이블의 행 수가 반환됩니다. 그렇지 않으면 NULL을 반환하고 싶습니다. https://dba.stackexchange.com/questions/66741/why-cant-i-use-a-case-statement-to-see-if-a-column-exists-and-not-select-from-i
나는
CASE WHEN EXISTS (SELECT 1 FROM sys.tables WHERE [object_id] = OBJECT_ID('possibleTable')
THEN (SELECT COUNT(1) FROM possibleTable WHERE mycondition)
ELSE (SELECT NULL)
END
을 사용할 수 없습니다
그것은 주어진 열이 테이블에 존재하는지 여부를 쿼리를 작성하는 방법을 다루는이 질문의 "표"버전의
... 테이블이 존재하지 않을 때 코드가 실행되지 않더라도 컴파일 타임에 바인딩을 시도하기 때문에 테이블이 존재하지 않을 때 오류가 발생합니다.
기본적으로 새 테이블의 개수를 포함 시키려면 CTE를 늘려야하지만 테이블이 없으면 실패하지 않아야합니다. 테이블이 있는지를 확인하고 두 개의 다른 CTE 중 하나를 실행하기 위해 데이터베이스를 다시 왕복해야하는 것은 나에게 불쾌한 것처럼 보입니다. 그러나 지금까지는 더 좋은 방법을 찾지 못했습니다.
누구나 그러한 일을 할 수있는 SQL 마법을 가지고 있다면 재미있는 "CROSS JOIN"트릭이 가능할 수도 있습니다.
쿼리에서는이 작업을 수행 할 수 없지만 SQL 프로 시저로 수행 할 수 있습니다. 예를 들어,'IF..ELSE ... '예제는 실제로 SQL 쿼리가 아닌 SQL * 프로 시저 * (또는 스크립트)입니다. 그래서, 당신의 예제'IF..' 프로 시저/스크립트는 그것을하기 위해 수정 될 수 있습니다. 하지만 .. 단일 쿼리를 중심으로 뷰를 정의 할 수는 있지만 프로 시저/스크립트로 작성할 수는 없습니다. – RBarryYoung
저장 프로 시저를 사용할 수 없다고 가정하지만 DB에 대해 원하는 모든 SQL 스크립트를 실행할 수 있습니다 ... 어떻게 수행 할 것인지 잘 모르겠습니다 (현재 테스트 중이며 지금 실행중인 방법입니다) SQL Server Management Studio의 쿼리 창에있는 스크립트) ... 내 문제는 큰 스크립트이고 테이블이 있는지 여부에 따라 NULL 또는 COUNT 인 결과 집합에 하나 이상의 열을 추가하기 만하면됩니다. – pmbAustin
동적 SQL을 사용하여 테이블을 선택하는 방법은 어떻습니까? 테이블이 존재할 때 전체 테이블을 읽는 대신 DMV에서 카운트를 얻기 위해'sys.partitions'를 호출 할 수도 있습니다. 하지만 더 중요한 것은 왜 존재할 수있는 테이블에 대해 하드 코딩 된 이름을 사용하여 코드를 작성하고 있습니까? –