2010-05-27 21 views
1

嘿,我想把一個小邏輯到我的C#應用​​程序,將創建一個名爲導入表,如果它不存在..這裏是我的代碼,它似乎沒有工作壽。C#SQL創建表如果它不存在

con.Open(); 
        using (SqlCommand cmd = con.CreateCommand()) 
        { 
         cmd.CommandText = 
          @" 
         IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'RX_CMMData' AND TABLE_NAME = 'Import')) 
BEGIN 
CREATE TABLE Import (
    RowId  integer PRIMARY KEY NOT NULL, 
    PartNumber varchar(200) NOT NULL, 
    CMMNumber varchar(200) NOT NULL, 
    Date  varchar(200) NOT NULL, 
    FeatType varchar(200) NOT NULL, 
    FeatName varchar(200) NOT NULL, 
    Value  varchar(200) NOT NULL, 
    Actual  decimal, 
    Nominal  decimal, 
    Dev   decimal, 
    TolMin  decimal, 
    TolPlus  decimal, 
    OutOfTol decimal, 
    FileName varchar(200) NOT NULL 
); END"; 
         cmd.ExecuteNonQuery(); 
        } 
        con.Close(); 
+0

你什麼錯誤?它沒有顯示出來嗎? – Tony 2010-05-27 17:48:03

回答

3

的是SQL Server 2005中的語法項目是

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tablename]') AND type in (N'U')) 
BEGIN 
    -- create 
END 

在你的代碼,哪裏是= FALSENOT關鍵字?

0

某些DBMS允許您在SQL中執行CREATE TABLE IF NOT EXISTS <tablename>。我會檢查你的DBMS的語法。

+1

Oracle允許創建或更換 – 2010-05-27 17:44:58

+0

如果您在Oracle中執行CREATE OR REPLACE,是否刪除當前存儲在表中的數據,或者只更改表定義?它感覺不太一樣。 – 2010-05-27 17:50:56

+0

否 - 如果表存在,那麼數據將會正常(假設您不做任何會影響數據的更改,例如刪除列或其他內容) – 2010-05-27 18:05:19

9

您的SQL正在創建表,如果它存在的話,而不是如果它不存在。

將SQL更改爲IF NOT EXISTS

+3

+1斑點! – 2010-05-27 17:48:32

+0

仍然不起作用。一旦創建,我再次運行該應用程序,它失敗,說明'表導入已經存在。 – 2010-05-27 18:03:47

+0

如果您運行'SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ='Import'',您會看到什麼? (請參閱Andomar的答案) – 2010-05-27 18:10:36

0

如果您正在使用Oracle,你可以嘗試

select count(*) from user_tables 
where table_name = '' 

這應該告訴你,如果表中存在

2

你可能在默認模式創建表(通常dbo

指定的全名,如:

CREATE TABLE RX_CMMData.Import 
4

你ç也考慮使用Microsoft SMO對象。我更喜歡使用SMO對象,並讓他們儘可能爲我做這項工作,而不是通過代碼執行SQL文本。

使用SMO數據庫對象,您可以執行以下操作。

Database db = myServer.Databases["MyDB"]; 

if (! db.Tables.Contains("NewTable")) 
{ 

    Table tbl = new Table(db, "NewTable"); 

    Column col1 = new Column(tbl, "Column1", DataType.Varchar(10)); 
    col1.Nullable = true; 
    tbl.Columns.Add(col1); 

    tbl.Create(); 

} 

http://www.mssqltips.com/tip.asp?tip=1826

+2

不同筆畫和所有這些,但我發現只需編寫SQL腳本比創建所有對象並設置屬性(如示例代碼中所示)要容易得多。 – 2010-05-27 18:32:51

相關問題