首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 判斷資料表是否存在:DAO 迴圈法 vs 系統表查詢法

     編輯:關於SqlServer

在 Access/VBA 環境下判斷資料表是否存在,有兩種主流做法:

方法一:DAO 迴圈檢查 TableDefs

Function fExistTable(strTableName As String) As Boolean
  Dim db As Database, i As Integer
  Set db = DBEngine.Workspaces(0).Databases(0)
  fExistTable = False
  db.TableDefs.Refresh
  For i = 0 To db.TableDefs.Count - 1
    If StrComp(strTableName, db.TableDefs(i).Name, vbTextCompare) = 0 Then
      fExistTable = True
      Exit For
    End If
  Next i
  Set db = Nothing
End Function

' 呼叫範例
Private Sub Command0_Click()
  If fExistTable("需判斷的資料表名") Then
    MsgBox "資料表存在"
  Else
    MsgBox "資料表不存在"
  End If
End Sub

注意: 函式需傳入參數,否則會出現「引數不選擇性」錯誤。

方法二:查詢系統表 MSysObjects(更高效)

SELECT COUNT(*) AS Qty
FROM MSysObjects
WHERE Name = '需判斷的資料表名'
  • Qty > 0 表示存在
  • 單一 SQL 陳述式,無需迴圈,效能優於 DAO
  • 需在 Access 中啟用「顯示系統物件」才能看見 MSysObjects

SQL Server 環境對應寫法

-- SQL Server 2000/2005+
IF OBJECT_ID('dbo.YourTable', 'U') IS NOT NULL
  PRINT '表存在'
ELSE
  PRINT '表不存在'

-- 或查詢系統目錄
SELECT COUNT(*) FROM sysobjects WHERE name = 'YourTable' AND xtype = 'U'

比較總結

方法適用環境效能備註
DAO 迴圈Access/VBA較慢需正確傳參
MSysObjectsAccess SQL快需啟用系統物件檢視
OBJECT_IDSQL Server最快原生函式,最佳選擇

依執行環境選擇最適合的方法,SQL Server 環境請優先使用 OBJECT_ID。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved