모든 데이터베이스에서 실행할 수있는 Master
데이터베이스에 시스템 저장 프로 시저를 만들었습니다. 한 번에 모든 데이터베이스에서 실행하고 싶습니다 :모든 데이터베이스에서 프로 시저 실행
use Master
GO
declare @sql nvarchar(1000)
SET @sql = 'USE [?]; EXEC [dbo].[sp_procedure]'
EXEC sp_MSforeachdb @sql
문제는 - 모든 데이터베이스가 유사한 테이블과 열 구조를 가지고있는 것은 아닙니다. 그래서 내부 절차, 나는 어떤 계산을 수행하기 전에이 작업을 수행 :
if exists(select 1
from
INFORMATION_SCHEMA.TABLES b,
INFORMATION_SCHEMA.COLUMNS c
where
b.TABLE_TYPE = 'BASE TABLE'
and b.TABLE_NAME = 'tablename'
and c.TABLE_NAME = b.TABLE_NAME
and c.COLUMN_NAME = 'columnname')
그래서, 모든 데이터베이스에서 실행하는 동안 경우, 그 데이터베이스에 대한 절차를 생략해야하고 열 이름 'C 럼 이름'과 'TABLENAME'라는 이름의 테이블이 없습니다 다음 데이터베이스로 이동하십시오. 나는 'TABLENAME'테이블을 가지고 있지만,이 테이블의 '기둥 이름'열이없는 데이터베이스가 있으며이 오류 반환 : if 문
Invalid column name 'columnname'.
왜 if exists
문 안쪽에 간다를? 조건이 충족되지 않는 즉시 종료해야합니까? 이 상황을 어떻게 처리 할 수 있습니까?
[나쁜 습관 : 오래된 스타일의 조인 사용] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- ANSI - ** 92 ** SQL 표준 (** 20 년 이상 **)에서 * * ANSI'JOIN' 구문으로 구식 * * 쉼표로 구분 된 테이블 목록이 대체되었습니다. 이전에) 그리고 그것의 사용은 낙담했다 –