MS Access:如果不存在则添加列(或尝试/捕获它)

时间:2015-04-03 08:35:10

标签: sql ms-access add exists alter

这是一个简单的问题,但我找不到解决方案......

我必须检查列是否存在,如果测试为负则添加它。我怎么能只使用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 Access,仅使用SQL代码......执行此操作的语法是什么?

更新:也可以尝试使用cath语句,但是如果它不存在,我只需要添加任何内容......所以,try catch也没关系,我认为。另外尝试catch很容易在sql server中使用...以及访问?

更新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之后执行alter table?

2 个答案:

答案 0 :(得分:3)

您无法在Access SQL中执行此操作。 你可以运行:

ALTER TABLE TabTessereVeicoli ADD TAGA text(25) NULL;

并忽略错误,或者您可以使用VBA打开TableDef并进行修改。

答案 1 :(得分:0)

来自其他人的组合(和测试)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

当然,如果需要,可以很容易地将它们组合成一个功能。