Ms-Access
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 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(); } }