2013-06-17 2 views
1

Я запускаю это из SQL Server 2008 R2.Использование переменной для запроса sys.servers

Возможно ли использовать имя переменной при написании запроса на запрос из sys.servers?

DECLARE @hostname varchar(20) 
SET @hostname = '192.168.110.101' 
SELECT TOP(10) * FROM [@hostname].databasename.dbo.tablename 

возвращение «Не удалось найти сервер„@ имя_узел“в sys.servers. Убедитесь, что правильное имя сервера было указано. При необходимости, выполнить хранимую процедуру sp_addlinkedserver, чтобы добавить сервер в sys.servers.».

Похоже, что он пытается буквально использовать @hostname, а не то, на что фактически установлена ​​переменная. Я также попытался удалить скобки, и это тоже не сработает. Есть идеи?

+3

вам нужно будет выполнить динамический sql. –

+3

Для этого вам понадобится динамический sql. –

+0

Это не работает. Я что-то делаю неправильно: 'code'DECLARE @sql as NVARCHAR (100); 'code'SET @sql = N'SELECT * from [@hostname] .xstore.dbo.trn_trans ' ' code'EXEC sp_executesql @stmt = @sql, @params = N' @ hostname как varchar (25) ', @hostname = '192.168.1.1' – Trinculo

ответ

1
DECLARE @SQL as varchar(max) 
SET @SQL = 'SELECT TOP 10 * FROM ' 
DECLARE @hostname varchar(20) 
SET @hostname = '192.168.110.101' 
SET @SQL = SQL + @hostname + '.databasename.dbo.tablename' 

EXEC (@SQL) 
+0

Спасибо за ответ! Я получаю это: Msg 102, Level 15, State 1, Line 1 Неверный синтаксис около '192.168'. – Trinculo

+0

Хорошо, дайте мне заглянуть в это ... Извините, что – logixologist

+0

Мне не хватало символа (AT) после SET (AT) SQL = SQL – logixologist

Смежные вопросы