powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Путь к таблицам как переменная
16 сообщений из 16, страница 1 из 1
Путь к таблицам как переменная
    #39609992
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Пусть есть такой простой SQL-запрос. Этот запрос запускается через сервер, который обращается либо одному прилинкованному серверу, либо к другому. Но названия баз данных одинаковые на этих прилинкованных серверах. В запросах используется полный путь к таблицам.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
	Поле1,
	Поле2,		
	Поле3	
FROM
	Server1.БазаДанных1.dbo.Таблица1 Таблица1


Выделенную строку нужно сделать как переменную.

Код: sql
1.
2.
3.
4.
5.
6.
7.
Declare @ПолныйПуть varchar (100)='Server1.БазаДанных1.dbo'
SELECT
	Поле1,
	Поле2,		
	Поле3	
FROM
	@ПолныйПуть.Таблица1 Таблица1


Понятно, что этот запрос не рабочий.

Ка правильно написать запрос?
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610008
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно - обеспечить ОДИНАКОВЫЕ имена на всех серверах.

View или Synonym те в кривые ручки.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610086
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Правильно - обеспечить ОДИНАКОВЫЕ имена на всех серверах
Имена таблиц на разных серверах одинаковые, а имена серверов разные.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610087
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222View или Synonym
А как в запросе писать?
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610096
Klick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkИмена таблиц на разных серверах одинаковые, а имена серверов разные.
Ваша задача решается только динамическим запросом.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610102
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KlickferzmikkИмена таблиц на разных серверах одинаковые, а имена серверов разные.
Ваша задача решается только динамическим запросом.
Вот и поэтому я хочу написать такой запрос, чтобы в параметре указывал имя сервера.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610414
Oomel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @QUERY NVARCHAR(1000), @SCHEMA NVARCHAR(50);

SET @SCHEMA = N'Server1.БазаДанных1.dbo';

SET @QUERY = N'SELECT FIELD1, FIELD2, FIELD3 FROM ' +  @SCHEMA + '.TABLE1';

EXEC SP_EXECUTE @QUERY;



Полагаю, что-то подобное.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610653
лолл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Код: sql
1.
CREATE SYNONYM dbo.Таблица1 FOR Server1.БазаДанных1.dbo.Таблица1 



соответственно, синонимы указывают на разные серверы в разных базах, но имеют одинаковые наименования
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610656
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkЗдравствуйте!

Пусть есть такой простой SQL-запрос. Этот запрос запускается через сервер, который обращается либо одному прилинкованному серверу, либо к другому. Но названия баз данных одинаковые на этих прилинкованных серверах. В запросах используется полный путь к таблицам.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
	Поле1,
	Поле2,		
	Поле3	
FROM
	Server1.БазаДанных1.dbo.Таблица1 Таблица1


Выделенную строку нужно сделать как переменную.

Код: sql
1.
2.
3.
4.
5.
6.
7.
Declare @ПолныйПуть varchar (100)='Server1.БазаДанных1.dbo'
SELECT
	Поле1,
	Поле2,		
	Поле3	
FROM
	@ПолныйПуть.Таблица1 Таблица1


Понятно, что этот запрос не рабочий.

Ка правильно написать запрос?
Можно с извращениями :)
Код: sql
1.
2.
3.
4.
5.
SELECT
	Поле1,
	Поле2,		
	Поле3	
FROM openquery(linked server сам на себя с одинаковым названием на всех серверах, 'select нужные_столбцы from база.dbo.таблица')
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610657
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

Это если справедливо утверждение автора темы "Но названия баз данных одинаковые на этих прилинкованных серверах", конечно же.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610743
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"запрос запускается через сервер, который обращается либо одному прилинкованному серверу, либо к другому".
Как уже сказали либо динамический запрос, либо синонимы. Если запрос достаточно сложный, то лучше выбрать синонимы.

Обращение к первому серверу:
Код: sql
1.
2.
drop synonym dbo.Table1; create synonym dbo.Table1 for Server1.DB.scheme.Table1;
select * from dbo.Table1;

Обращение ко второму серверу:
Код: sql
1.
2.
drop synonym dbo.Table1; create synonym dbo.Table1 for Server2.DB.scheme.Table1;
select * from dbo.Table1;
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610749
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l"запрос запускается через сервер, который обращается либо одному прилинкованному серверу, либо к другому".
Как уже сказали либо динамический запрос, либо синонимы. Если запрос достаточно сложный, то лучше выбрать синонимы.

не учите людей плохому

https://blogs.msdn.microsoft.com/sqlsakthi/2011/05/08/best-performer-distributed-query-four-part-or-openquery-when-executing-linked-server-queries-in-sql-server/
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610759
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxx,

Научите хорошему.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610765
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare 
   @table nvarchar(256) = 'DBName.schema.TableName'
  ,@sql nvarchar(2048) =''

set @sql = 'select ... from openquery(ServerName, ''select .. from '''+@table+''' )'

exec (@sql) / sp_executesql  @sql 
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610769
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxx,

Согласен.

Еще можно запрос заключить в хранимые процедуры на прилинкованных серверах.
К ним сделать синоним и вызывать по имени синонима.
Здесь отсутствует динамика.
...
Рейтинг: 0 / 0
Путь к таблицам как переменная
    #39610775
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkВот и поэтому я хочу написать такой запрос, чтобы в параметре указывал имя сервера.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @proc sysname = 'Server1.БазаДанных1.sys.sp_executesql';
declare @query nvarchar(max) = N'SELECT
	Поле1,
	Поле2,		
	Поле3	
FROM
	dbo.Таблица1';

exec @proc @query;
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Путь к таблицам как переменная
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]