这是一个简单的问题,但我找不到解决方案......
我必须检查列是否存在,如果测试为负则添加它。我怎么能只使用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?
答案 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
当然,如果需要,可以很容易地将它们组合成一个功能。