Maideen Abdul Kader Ответов: 2

Как динамически использовать имя базы данных в запросе с помощью хранимой процедуры mssql 2014?


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

Мой код

Declare @dbname varchar(50),@sqlCommand varchar(1000)
Set @dbname ='dbname'
set @sqlCommand = '
	SELECT  RegDate,  SID, Name, CAddress, TelEM1, TelEM2, Relation, Disablity,  Loan, TRStatus 
        FROM' + @dbname +  'dbo.MemberRecord '

EXEC (@sqlCommand)

Ошибка есть
Msg 102, Уровень 15, Состояние 1, Строка 15
Неправильный синтаксис рядом с '.'.

если я использую приведенный ниже код, то работаю нормально

SELECT  RegDate,  SID, Name, CAddress, TelEM1, TelEM2, Relation, Disablity,  Loan, TRStatus 
	FROM  [dbname].dbo.[MemberRecord]  ORDER BY SID 


Пожалуйста, посоветуйте мне
Спасибо

Мейден

Что я уже пробовал:

Declare @dbname varchar(50),@sqlCommand varchar(1000)
Set @dbname ='dbname'
set @sqlCommand = '
	SELECT  RegDate,  SID, Name, CAddress, TelEM1, TelEM2, Relation, Disablity,  Loan, TRStatus 
        FROM' + @dbname +  'dbo.MemberRecord '

EXEC (@sqlCommand)

2 Ответов

Рейтинг:
16

RedDk

Попробовать это. Я вставил ваш код ниже точно так же, как он появляется в копии содержимого страницы cp в мой буфер обмена:

Declare @dbname varchar(50),@sqlCommand varchar(1000)
Set @dbname ='dbname'
set @sqlCommand = '
	SELECT  RegDate,  SID, Name, CAddress, TelEM1, TelEM2, Relation, Disablity,  Loan, TRStatus 
        FROM' + @dbname +  'dbo.MemberRecord '

EXEC (@sqlCommand)
Хорошо. Поэтому вставьте этот оператор сейчас (сразу после набора и перед исполнителем):
PRINT @sqlCommand
И прокомментируйте это утверждение:
EXEC(@sqlCommand)
Выполните все заявление, измененное, как указано выше ...
SELECT  RegDate,  SID, Name, CAddress, TelEM1, TelEM2, Relation, Disablity,  Loan, TRStatus
    FROMdbnamedbo.MemberRecord
Видишь, что случилось? Между словом FROM и присвоенным переменной @dbname значением 'dbname' нет пробела, а также "точки" (.), обозначающей разделение между именем схемы и базой данных. Usg оператор PRINT, вкрапленный в ваш код, является одним из методов отладки, который весьма полезен, поскольку его можно легко закомментировать для выполнения последовательных тестов.

То".", что вы упускаете, должно стать частью вашей конкатенации:
FROM ' + @dbname + '.' + 'dbo.MemberRecord'


Рейтинг:
1

Maideen Abdul Kader

Спасибо

сейчас решается

Мейден