2013-10-02 17 views
6

Mam db A i db B. Na początku procedury przechowywanej chcę utworzyć kopię zapasową wszystkich wierszy od B.mytable do B.mytablebackup. Reszta procedury przechowywanej działa w oparciu o tabele na db A (które zbierają dane i zapisują je do B.mytable).Jak sprawdzić istnienie tabeli z innego sql dbl?

więc sprawdzić, czy B.mytablebackup istnieje

IF EXISTS(SELECT 1 FROM B.dbo.mytablebackup) 

a jeśli tak, to procedura przechowywana robi się

INSERT INTO B..mytablebackup SELECT * FROM B..mytable 

Jeśli nie istnieje to robi

SELECT * INTO B..mytablebackup from B..mytable 

Ale po wykonaniu procedury przechowywanej otrzymuję komunikat o błędzie

Istnieje już obiekt o nazwie „mytablebackup” w bazie

dodałem Print oświadczenia i wykonanie bierze „nie istnieje” oddział IF.

Co robię źle?

+1

*** SQL *** jest po prostu * językiem danych strukturalnych * - języka używanego przez wiele systemów baz danych, ale nie jest produktem bazy danych ... wiele rzeczy jest specyficznych dla dostawcy - więc naprawdę musimy wiedzieć, jaki ** system baz danych ** (i której wersji) używasz (proszę odpowiednio zaktualizować tagi) ... –

+1

@marc_s Przypuszczam, że jest to MSSQL oparty na 'db.schema.tbl' formacie – Kermit

+2

' IF EXISTS (SELECT 1 FROM B.dbo.mytablebackup) 'sprawdza, czy istnieje co najmniej jeden wiersz * w ciągu' 'mytablebackup'. Nie informuje o tym, czy sama tabela * istnieje * (jeśli tabela nie istnieje, spowoduje błąd kompilacji) –

Odpowiedz

10

Dla programu SQL Server należy użyć widoku systemowego sys.tables, aby sprawdzić, czy tabela istnieje.

IF EXISTS(SELECT 1 FROM B.sys.tables WHERE name = 'mytablebackup') 
+0

Dzięki, Eric. To wystarczyło. – DeveloperM

Powiązane problemy