2011-03-21 2 views
0

두 개의 SQL Server 데이터베이스가있는 디자인이 있습니다. 두 데이터베이스 모두에 DML 문을 포함하는 단일 트랜잭션이 있습니다.msdtc와의 교차 서버 트랜잭션, 동적 SQL없이 DML 컨텍스트 전환

문제는 두 번째 데이터베이스 이름이 미리 정의되지 않았기 때문입니다. 저장 프로 시저에 대한 매개 변수가 될 수 있습니다. 각 DML 문에 데이터베이스 이름과 서버 이름을 지정하고 싶습니다.

동적 SQL을 사용하지 않고 명령문의 컨텍스트를 전환 할 수있는 방법이 있습니까?

간단히 말해서 : 서버 이름과 데이터베이스 이름이 동적 인수 인 DML 문의 서버 이름과 데이터베이스 이름에 접두어를 붙이는 방법은 무엇입니까?

동적 SQL을 사용하지 않고이를 수행 할 수있는 방법이 있습니까? 아니면이 문제를 해결할 다른 방법이 있습니까?

답변

0

기존 프로세스에서 DML을 결합하는 대신 별도의 SP 또는 프로세스에서 DML을 처리하는 것이 좋지 않습니다. 네 부분으로 된 이름에 변수를 사용할 수 없습니다. 달리 지정하지 않는 한 데이터베이스 개체 이름에 대한 모든 Transact-SQL 참조는 다음 형식의 네 부분으로 된 이름이 될 수 있습니다.

server_name. [database_name ]. [schema_name] .object_name

| database_name. [schema_name] .object_name

| schema_name.object_name

| object_name

server_name 연결된 서버 이름 또는 원격 서버 이름을 지정합니다.

database_name 개체가 SQL Server의 로컬 인스턴스에있을 때 SQL Server 데이터베이스의 이름을 지정합니다. 개체가 연결된 서버에 있으면 database_name은 OLE DB 카탈로그를 지정합니다.

스키마 이름 개체가 SQL Server 데이터베이스에있는 경우 해당 개체가 들어있는 스키마의 이름을 지정합니다. 오브젝트가 링크 된 서버에 있으면 schema_name은 OLE DB 스키마 이름을 지정합니다. 스키마에 대한 자세한 내용은 사용자 - 스키마 분리를 참조하십시오.

object_name 개체의 이름을 참조하십시오.