Кросс-запросы к базе данных с нумерованным именем базы данных

Я немного новичок в том, что касается SQL Server 2005. У меня есть база данных, содержащая большинство хранимых процедур и таблиц (мы назовем ее "GrandDatabase"). У каждого пользователя есть своя отдельная база данных, названная по нумерованному идентификатору пользователя. Итак, у меня есть список базы данных следующим образом, например:

GrandDatabase
100
101
102
...

Мне нужно объединить таблицы в базе данных GrandDatabase и в базе данных пользователя. В другом месте я читал, что при запуске из GrandDatabase должно работать следующее:

SELECT
    *
FROM
    GrandDatabase.User INNER JOIN
    100.dbo.UserInfo ON GrandDatabase.User.UserID = 100.dbo.UserInfo.UserID

Это дает мне синтаксическую ошибку с жалобой на '.' сразу после первой ссылки на базу 100. Я немного поработал и обнаружил, что этот код работает нормально, когда я использую ненумерованные базы данных (например, заменяя "100" выше на "User100"). Кто-нибудь знает, как заставить это работать с нумерованными именами баз данных?

Спасибо!
Крис

3 ответа

Решение

Попробуйте поместить числа в квадратные скобки и использовать псевдонимы, например:

SELECT    *
FROM    GrandDatabase.User 
INNER JOIN    [100].dbo.UserInfo u
   ON GrandDatabase.User.UserID = u.UserID

Попробуйте использовать [100].dbo.UserInfo вместо 100.

Попробуйте заключить имя базы данных в квадратные скобки:

SELECT
    *
FROM
    GrandDatabase.User INNER JOIN
    [100].dbo.UserInfo ON GrandDatabase.User.UserID = [100].dbo.UserInfo.UserID
Другие вопросы по тегам