2010-04-21 14 views
6

Tengo una pequeña pregunta que tengo en mente desde hace un tiempo.Sql Server CE - Incremento temporal de autodeshabilitar en una columna específica

aquí va:

¿Es posible deshabilitar temporalmente AUTO_INCREMENT en el identificador de columna.

Para poder agregar una nueva fila a la tabla y poder especificar el valor de ID al insertar la fila.

Y al final, ¿vuelve a habilitar Auto_Increment y deja que funcione como de costumbre?

Y si es posible, ¿cómo puedo hacerlo?

La estructura de la tabla es muy simple

Nombre de columna (atributos)

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

Nota:

  • El nombre de la tabla es: People.
  • Consideremos también que la tabla ya tiene datos y no puede modificarse.
  • El servidor de base de datos es SQL Server CE.
  • Los comandos SQL se ejecutarán en un programa C#, si es de alguna ayuda.

Realmente espero que sea posible, sería muy útil.

Gracias

EDITAR

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

La cadena de conexión está funcionando, lo han intentado.

Informa:

Se ha producido un error al analizar la consulta. [número de línea de emergencia = 1, la línea de emergencia desplazamiento = 20, Token por error = SET]

SOLUCIÓNgracias a 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

ya ha respondido [aquí] (http://stackoverflow.com/questions/682654/sql-server-ce-3-5 -identidad-inserción) ... –

+0

Ya lo había intentado, sin éxito. –

Respuesta

8

Creo que se puede utilizar SET IDENTITY_INSERT. No estoy seguro de si esto funciona en todas las versiones.

Actualización 2:

Prueba esta versión:

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

He intentado con "SET IDENTITY_INSERT People ON" y luego traté de insertar algunas filas especificando el ID, y el programa falla. Y VB solo puede decir esto: "La columna no se puede modificar. [Nombre de columna = id]" –

+0

Lo mismo ocurre si intento agregar una fila y especificar la ID y no ejecutar "SET IDENTITY_INSERT". Por lo que puedo ver, creo que "SET IDENTITY_INSERT" no tiene ningún efecto. –

+1

¿Lo está ejecutando como una declaración de lotes separados por punto y coma? – RedFilter

Cuestiones relacionadas