Как можно динамически изменять имя базы данных в select с связанного сервера

#sql #sql-server #tsql

Вопрос:

 DECLARE @dbname sysname

SET @dbname = 'SERP'

SELECT TOP (200) a.GrpCode, a.GrpDesc, a.GrpType, a.TarazId, a.SumDesc, a.SumFlag
    FROM LINKEDSERVER1.@dbname.dbo.A_AccGroup a
 

Msg 102, Уровень 15, Состояние 1, Строка 6
Неправильный синтаксис рядом с «@dbname».

Я хочу изменить базу данных на связанном сервере. Я пытаюсь использовать SQL Server 2008 R2

Комментарии:

1. Измените его на литеральную строку и выполните с помощью exec, например exec('SELECT TOP (200) a.GrpCode, a.GrpDesc, a.GrpType, a.TarazId, a.SumDesc, a.SumFlag FROM LINKEDSERVER1.' @dbname '.dbo.A_AccGroup a')

2. Почему вы не используете динамический запрос?

3. Я не рекомендую просто вводить значение имени базы данных без санитарной обработки @doctorgu ; мы понятия не имеем, откуда берется значение.

4. @Larnu В данном случае значение взято из переменной @dbname. Спрашивающий попытался объединить @dbname с оператором select. Поэтому я сообщил, как это совместить. Если вы не хотите объединять, вы должны использовать как if @dbname = 'A' select * from LINKEDSERVER1.A.dbo.A_AccGroup else if @dbname = 'B' select * from LINKEDSERVER1.B.dbo.A_AccGroup

5. Я думаю, вы упустили мою мысль, @doctorgu . Я добавлю акцент: я не рекомендую просто вводить значение имени базы данных без санитарной обработки @doctorgu. ( QUOTENAME существует не просто так.)