Межсерверная транзакция с msdtc, переключение контекста DML без динамического SQL - PullRequest
0 голосов
/ 21 марта 2011

У меня есть проект, в котором у меня есть две базы данных SQL Server.У меня есть одна транзакция, содержащая операторы DML для обеих баз данных.

Проблема в том, что второе имя базы данных не задано заранее.Это может быть параметром хранимой процедуры.Я хочу указать имя базы данных и имя сервера в каждом операторе DML.

Без использования динамического SQL есть способ переключения контекста оператора.

Или просто: какдобавьте префикс имени сервера и базы данных в оператор DML, где имя сервера и имя базы данных являются динамическими аргументами?

Есть ли способ сделать это без использования динамического SQL?Или есть другой способ решить эту проблему?

1 Ответ

0 голосов
/ 23 марта 2011

Не лучше ли обрабатывать DML в отдельном SP или процессе, а не объединять их в существующий процесс. Невозможно использовать переменные в именах из четырех частей: Если не указано иное, все ссылки Transact-SQL на имя объекта базы данных могут быть именами из четырех частей в следующей форме:

имя_сервера. [Имя_базы_данных]. [Имя_схемы] .объект_имя

| database_name. [schema_name] .object_name

| schema_name.object_name

| имя_объекта

server_name Указывает имя связанного сервера или имя удаленного сервера.

database_name Задает имя базы данных SQL Server, когда объект находится в локальном экземпляре SQL Server. Когда объект находится на связанном сервере, имя_базы_данных указывает каталог OLE DB.

schema_name Указывает имя схемы, содержащей объект, если объект находится в базе данных SQL Server. Когда объект находится на связанном сервере, имя_схемы задает имя схемы OLE DB. Для получения дополнительной информации о схемах см. Разделение между пользовательской схемой.

object_name Относится к названию объекта.

...