2015-04-03 54 views
3

這是一個簡單的問題,但我不能找出解決辦法...的MS Access:添加列,如果不存在(或嘗試/捕獲它)

我要檢查,如果列中存在,並添加它如果測試是否定的。我怎樣才能只使用sql代碼?

這是SQL Server的語法:

IF NOT EXISTS (
    SELECT * 
    FROM sys.columns 
    WHERE object_id = OBJECT_ID(N'[dbo].[Person]') 
     AND name = 'ColumnName' 
) 
BEGIN 
    --STUFF HERE 
END 

和MS訪問,只用SQL代碼...什麼是正確的語法來做到這一點?

UPDATE:還有一種方法做一個嘗試導管聲明將是確定的,我只需要的,如果它不存在,不添加任何東西......所以,還嘗試捕捉是好的,我想。也嘗試趕上很容易在SQL服務器中使用...和訪問?

更新2:我已經這樣做了:

If Not Exists (Select Column_Name 
      From INFORMATION_SCHEMA.COLUMNS 
      Where Table_Name = 'TabTessereVeicoli' 
      And Column_Name = 'TAGA') 
begin 

    ALTER TABLE TabTessereVeicoli ADD TAGA text(25) NULL; 

end 

,但我得到的錯誤 「SQL語句無效預計DELETE,INSERT,PROCEDURE,SELECT或UPDATE。」 爲什麼?如何在IF後執行更改表格?

+0

爲什麼downote?誰是這種人?這是一個問題,只是一個問題...... – 2015-04-03 08:42:32

+0

我不知道,這是一個普通的問題,儘管它不會花費太多的時間來發現Access SQL的ALTER選項非常有限。原因是,在Access中,使用VBA更容易執行這些操作。 – Gustav 2015-04-03 09:19:00

+0

感謝您的支持 – 2015-04-03 09:42:35

回答

2

您不能在Access SQL中執行此操作。 您可以運行這個命令:

ALTER TABLE TabTessereVeicoli ADD TAGA text(25) NULL; 

,只是忽略了一個錯誤,或者您可以使用VBA打開的TableDef,做你的修改。

+1

您可以使用VBA中的Access SQL進行此操作。像這樣: 'CurrentProject.Connection.Execute「ALTER TABLE TabTessereVeicoli ADD TAGA CHAR;' – Bobort 2015-10-23 15:30:52

1

結合(和測試)來自其他人的VBA片段,檢查Microsoft Access中是否存在字段,並將字段添加到表中。 (我想我會重新說明它們,部分原因是我自己參考!)

檢查字段表存在:

Function DoesFieldExist(sTable As String, sField As String) As Boolean 
    Err.Clear 
    On Error GoTo setfalse: 
    If (DCount(sField, sTable) = 0) And Err Then _ 
     DoesFieldExist = False Else DoesFieldExist = True 
setfalse: 
End Function 

新字段添加到表:

Sub AddFieldToTable(sTable As String, sField As String, sType As String) 
    On Error GoTo sError 
    CurrentProject.Connection.Execute "ALTER TABLE " & sTable & _ 
     " ADD " & sField & " " & sType & ";" 
    Debug.Print "Added field [" & sField & "]" 
    Exit Sub 
sError: 
    Debug.Print "Error adding field: " & Err, Err.Description 
    Stop 
End Sub 

中當然,如果需要,它們可以很容易地組合成一個功能。