Не удалось найти сервер DATABASE_NAME в ошибке sys.servers

Приведенный ниже код встроен в файл .sql в проекте vb.net. Это дает мне ошибку:

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

Я проверил sys.server, и LinkedDatabaseName возвращается, если я делаю select * from sys.servers

Вот код, в котором я получаю сообщение об ошибке ....

-----------------------------------
-- Obs Set Obs Set Obs Item Xref
-----------------------------------
-- STEP 1: txmr_TABLE1 to exp_TABLE1

DELETE FROM LinkedDatabaseName...exp_TABLE1
Select distinct newid() as GUID,
       b.ObsSetCode  as 'parObsSetCode',
       c.ObsSetCode  as 'chObsSetCode',
       d.ObsItemCode as 'chObsItemCode'
Into #tmp_exp_TABLE1
From   $$DATABASE_NAME$$..txmr_TABLE1 a
      Inner Join $$DATABASE_NAME$$..txmr_obs_set  b On a.parObsSetGUID  = b.GUID
      Left  Join $$DATABASE_NAME$$..txmr_obs_set  c On a.chObsSetGUID   = c.GUID
      Left Join  $$DATABASE_NAME$$..txmr_obs_item  d On a.chObsItemGUID = d.GUID
Order By b.ObsSetCode   

Select * From #tmp_exp_TABLE1


EXEC $$DATABASE_NAME$$..dbo.txmr_ExtractPOCIS '#tmp_exp_TABLE1', 
                                         '$$DATABASE_NAME$$.dbo.txmr_TABLE1_chg', 
                                         @FromVersion, 
                                         @ToVersion;

INSERT INTO LinkedDatabaseName...exp_TABLE1 (GUID, parObsSetCode, chObsSetCode, chObsItemCode)
SELECT GUID, parObsSetCode, chObsSetCode, chObsItemCode
FROM #tmp_exp_TABLE1
ORDER BY parObsSetCode, chObsSetCode;
DROP TABLE #tmp_exp_TABLE1;

SELECT COUNT(*), 'exp_TABLE1' FROM LinkedDatabaseName...exp_TABLE1;

-- STEP 2: txmr_TABLE1_chg to exp_TABLE1_chg

DELETE FROM LinkedDatabaseName...exp_TABLE1_chg;
INSERT INTO LinkedDatabaseName...exp_TABLE1_chg (ChangeID, DateModified, parObsSetCode, chObsSetCode, chObsItemCode, RationaleLink, RationaleFreeText)
SELECT a.GUID              as 'ChangeID', 
       a.DateModified      as 'DateModified', 
       b.ObsSetCode        as 'parObsSetCode', 
       c.ObsSetCode        as 'chObsSetCode', 
       d.ObsItemCode       as 'chObsItemCode', 
       r.RationaleID       as 'RationaleLink', 
       a.RationaleFreeText as 'RationaleFreeText' 
FROM $$DATABASE_NAME$$..txmr_TABLE1_chg a
    INNER JOIN $$DATABASE_NAME$$..txmr_obs_set   b  ON a.parObsSetGUID = b.GUID
    LEFT JOIN  $$DATABASE_NAME$$..txmr_obs_set   c  ON a.chObsSetGUID  = c.GUID
    LEFT JOIN  $$DATABASE_NAME$$..txmr_obs_item  d  ON a.chObsItemGUID = d.GUID
    LEFT JOIN  $$DATABASE_NAME$$..txmr_rationale r  ON a.RationaleGUID    = r.GUID
WHERE @StartDate <= a.DateModified AND @EndDate > a.DateModified
ORDER BY a.DateModified, b.ObsSetCode;

SELECT COUNT(*), 'exp_TABLE1_chg' 
FROM LinkedDatabaseName...exp_TABLE1_chg;

person Utpal Mattoo    schedule 27.12.2013    source источник
comment
Глупый вопрос, но когда вы говорите DATABASE_NAME, вы имеете в виду имя базы данных или имя сервера базы данных?   -  person Stuart Ainsworth    schedule 28.12.2013
comment
Хорошо, я предполагаю, что здесь проблема с языком; Я не называл вас (или ваш вопрос) глупым, я использовал идиому, чтобы обозначить, что это может быть неуместный вопрос, относящийся к вопросу, который я вам задал.   -  person Stuart Ainsworth    schedule 28.12.2013
comment
Помимо приведенного ниже ответа, это может произойти, если в вашем имени БД есть точки. Затем вы должны инкапсулировать его с помощью [], например [$$ DATABASE_NAME $$]   -  person Ynhockey    schedule 16.04.2014


Ответы (1)


Проблема в том, что существует несогласованное использование строки подстановки $$ DATABASE_NAME $$. В большинстве случаев он используется для ссылки на конкретную базу данных.

$$DATABASE_NAME$$..txmr_TABLE1

но в строке exec:

EXEC $$DATABASE_NAME$$..dbo.txmr_ExtractPOCIS

слишком много точек, что означает, что теперь он ссылается на другой сервер, а не на базу данных.

Изменение этого утверждения на:

EXEC $$DATABASE_NAME$$.dbo.txmr_ExtractPOCIS

должен решить проблему.

person competent_tech    schedule 27.12.2013