Muszę rozwiązać problem, który mam, i potrzebuję pomocy w zrozumieniu, jak działa sp_msforeachdb, aby rozwiązać mój problem.
Za każdym razem, gdy uruchamiam sp_msforeachdb, pojawia się błąd Msg 102, Level 15, State 1, Incorrect syntax near '61'
Przykład mojego kodu jest następujący:
EXEC SP_msforeachdb 'SELECT ''?'' AS Database
FROM ?.sys.objects
WHERE name like ''%aetna%''
Jednak nie ma znaczenia, jakie zapytanie mam jako parametr sp_msforeachdb. Za każdym razem pojawia się ten sam błąd. Mam bazę danych, która zaczyna się od „61s1d”, więc myślę, że ma problem z nazwą DB, ale szczerze mówiąc, nie wiem, co dzieje się za kulisami na sp_msforeachdb.
Warto zwrócić uwagę.
- Jest to jedyna baza danych, która zaczyna się od liczby
- Mogę spróbować użyć kodu takiego jak „Jeśli baza danych jest jak '% 61%', nie rób ......”, ale wciąż ten sam błąd.
- Nie mogę przetestować zmiany nazwy bazy danych - zbyt wiele rzeczy z nią związanych.
- Jeśli utworzę testową bazę danych, która zaczyna się od „51”, to również pojawia się błąd dla tej bazy danych
Jak mogę to przezwyciężyć?
źródło
Nie zgadzając się z niczym, co powiedział @Kenneth, powinienem zauważyć, że napotkany błąd nie ma nic wspólnego
sp_MSForEachDB
. Wynika to z nazwy bazy danych: zaczyna się od liczby. Reguły nazewnictwa obiektów (nie tylko baz danych) są szczegółowo opisane na stronie MSDN dla identyfikatorów baz danych . Jeśli przestrzegasz „Reguł dla zwykłych identyfikatorów”, nie musisz umieszczać tych nazw w nawiasach kwadratowych lub podwójnych cudzysłowach. Ale nazwy, które nie są zgodne z tymi regułami , muszą być dołączone (zawsze).źródło