2010-04-21 41 views
6

我有這個小問題,我想了一會兒。Sql Server CE - 暫時禁用特定列上的自動增量

這裏有雲:

是否有可能臨時禁止的AUTO_INCREMENT的列ID。

這樣我就可以在表中添加一個新行,並且可以在插入行時指定ID值。

然後最後再次啓用Auto_Increment,並讓它像往常一樣工作?

如果有可能我該怎麼辦?

表結構非常簡單

列名(屬性)

ID (Primary Key, Auto Increment, int, not null) 
Name (nvarchar(100), not null) 

注:

  • 表名是:People
  • 我們還應該考慮表格已經有數據並且不能更改。
  • 數據庫服務器是SQL Server CE。
  • 如果有任何幫助,SQL命令將在C#程序中執行。

我真的很希望它有可能,它會非常方便。

感謝

編輯

SqlActions SqlActions = new SqlActions(); 

SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection()); 

try 
{ 
    SqlCmd.ExecuteNonQuery(); 
} 
catch (SqlCeException Error) 
{ 
    Console.WriteLine(Error.ToString()); 
} 

string query = "INSERT INTO People SET (ID, Nome) VALUES (@ID, @Nome)"; 

SqlCeCommand SqlInsert = new SqlCeCommand(query, SqlActions.Connection()); 

SqlInsert.Parameters.AddWithValue("@ID", 15); 
SqlInsert.Parameters.AddWithValue("@Nome", "Maria"); 

try 
{ 
    SqlInsert.ExecuteNonQuery(); 
} 
catch (SqlCeException Error) 
{ 
    Console.WriteLine(Error.ToString()); 
} 

連接字符串的工作,我已經嘗試過了。

他報告:​​

有解析查詢時出現錯誤。 [令牌行號= 1,令牌線 偏移 = 20,令牌錯誤= SET]

SOLUTION感謝OrbMan

 SqlActions SqlActions = new SqlActions(); 

     SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection()); 
     try 
     { 
      SqlCmd.ExecuteNonQuery(); 

      string query = "INSERT INTO People (ID, Nome) VALUES (@ID, @Nome)"; 
      SqlCmd.CommandText = query; 
      SqlCmd.Parameters.AddWithValue("@ID", 15); 
      SqlCmd.Parameters.AddWithValue("@Nome", "Vania"); 
      SqlCmd.ExecuteNonQuery(); 
     } 
     catch (SqlCeException Error) 
     { 
      Console.WriteLine(Error.ToString()); 
     } 
+0

已經回答[這裏](http://stackoverflow.com/questions/682654/sql-server-ce-3-5 -identity-插入)... – 2010-04-21 15:40:17

+0

我已經試過了,沒有成功。 – 2010-04-21 16:22:28

回答

8

我相信你可以使用SET IDENTITY_INSERT。我不確定這是否適用於所有版本。

更新2:

試試這個版本:

SqlActions SqlActions = new SqlActions(); 
SqlCeCommand SqlCmd = new SqlCeCommand("SET IDENTITY_INSERT People ON", SqlActions.Connection()); 
try 
{ 
    SqlCmd.ExecuteNonQuery(); 
    string query = "INSERT INTO People (ID, Nome) VALUES (@ID, @Nome)"; 
    SqlCmd.CommandText = query; 
    SqlCmd.Parameters.AddWithValue("@ID", 15); 
    SqlCmd.Parameters.AddWithValue("@Nome", "Maria"); 
    SqlCmd.ExecuteNonQuery(); 
} 
catch (SqlCeException Error) 
{ 
    Console.WriteLine(Error.ToString()); 
} 
+0

我試過「SET IDENTITY_INSERT People ON」,然後我試圖插入一些指定ID的行,程序崩潰。而VB只能這樣說:「列不能被修改[Column name = id]」 – 2010-04-21 16:15:23

+0

同樣的情況發生,如果我嘗試添加一行並指定ID並且未運行「SET IDENTITY_INSERT」。對於我所看到的,我認爲「SET IDENTITY_INSERT」沒有任何影響。 – 2010-04-21 16:21:51

+1

你是否將它作爲一個分號分隔的批處理語句執行? – RedFilter 2010-04-21 19:29:26