#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
существует не просто так.)