Ms-Access

MS Access:如果不存在則添加列(或嘗試/擷取它)

  • January 22, 2021

這是一個簡單的問題,但我找不到解決方案……

我必須檢查一列是否存在並在測試是否定的情況下添加它。我怎樣才能只使用 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 程式碼……什麼是正確的語法呢?

更新:還有一種方法來做一個 try cath 語句就可以了,如果它不存在,我只需要不添加任何東西……所以,我認為 try catch 也是可以的。還可以很容易地在 sql server 中使用 try catch …並進行訪問?

更新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 之後執行更改表?

Access 不支持IF EXISTS查詢中的語法;我認為你的錯誤來自於此。使用 Access SQL 執行任何類型的過程邏輯也非常困難。您的替代方法是執行該ALTER TABLE語句並在其他地方處理錯誤或使用 VBA 有條件地執行該語句。

tableexist = CheckTableExistance("Tbl_Name");
if (tableexist == true)
{
   using (System.Data.OleDb.OleDbCommand cmd = new       System.Data.OleDb.OleDbCommand("select * from Tbl_Name", con))
   using (var reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly))
   {
       var table = reader.GetSchemaTable();
       var nameCol = table.Columns["ColumnName"];

       if (table.Rows.Count <= Col_Count)
       {
           Connection_State();
           ///Now Alter Table And Add New Coloumn
           System.Data.OleDb.OleDbCommand cmd1 = new System.Data.OleDb.OleDbCommand("ALTER TABLE Tbl_Name ADD Fld_Name Field_Type", con);
           cmd1.ExecuteNonQuery();
       }
}

引用自:https://dba.stackexchange.com/questions/96953