2014-03-04 22 views
0

所以我創建一個腳本,我「米聯的數據庫中的其他服務器。檢查表都存在於外部鏈接的數據庫

使用OBJECT_ID我要檢查外部鏈接的數據庫中是否存在表像這樣:。

IF OBJECT_ID('[10.0.48.139].[DBNAME].[dbo].tblRating', 'U') IS NOT NULL 
    BEGIN 
     SET @Sql = N' 
     INSERT INTO tblRating 
       (fldSubDivisionID , 
        fldClientName , 
        fldAddress , 
        fldCountryID , 
        fldComments , 
        fldCreatedDate , 
        fldCreatedBy , 
        fldModifiedDate , 
        fldModifiedBy 
       ) 
     SELECT * FROM ' + @SourceDB + '.tblRating'; 
     EXECUTE sp_executesql @Sql; 
    END 
ELSE 
    PRINT 'Table [tblRating] Not Found in Source Database' 

即使表[10.0.48.139]存在[數據庫] [DBO]由於某種原因,它總是返回null,我不認爲OBJECT_ID喜歡它,當你把一個Serverlocation或ip在那裏

+0

@ a_horse_with_no_name:我認爲'sql'標籤應該保留。如果你正在回答一個T-SQL問題,那麼如果你的答案和SQL的分數一樣好,就和T-SQL一樣,是不是會這樣呢? –

+1

@AndriyM:不,我不這麼認爲。代碼示例和問題純粹是與SQL Server/T-SQL相關的。這裏沒有涉及標準的SQL。 「外部鏈接表」和使用專有存儲過程運行動態SQL與標準SQL無關。 –

+0

好的,但我需要幫助:P –

回答

1

您可以查詢INFORMATION_SCHEMA鏈接數據庫來完成此操作。不過,首先你必須創建鏈接的數據庫視圖,因爲它不能直接查詢,像這樣:

CREATE VIEW vwInformationSchemaTables AS SELECT * FROM INFORMATION_SCHEMA.TABLES 

然後你可以從鏈接數據庫中查詢,像這樣:

IF EXISTS(SELECT 1 FROM [10.0.48.139].[DBNAME].dbo.vwInformationSchemaTables WHERE TABLE_NAME='tblRating') 
BEGIN 
    --table exists 
END