Sql Server CE - Временное отключение автоматического приращения для определенного столбца - PullRequest
6 голосов
/ 21 апреля 2010

У меня есть этот маленький вопрос, который был у меня в голове некоторое время.

Вот оно:

Возможно ли временно отключить Auto_Increment для идентификатора столбца.

Чтобы я мог добавить новую строку в таблицу и иметь возможность указать значение идентификатора при вставке строки.

И затем в конце снова включить Auto_Increment, и пусть он будет работать как обычно?

И если это возможно, как я могу это сделать?

Структура таблицы очень проста

Имя столбца (атрибуты)

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

Примечание:

  • Имя таблицы: People.
  • Также давайте рассмотрим, что таблица уже содержит данные и не может быть изменена.
  • Сервер базы данных - SQL ServerCE.
  • Команды 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]

РЕШЕНИЕ благодаря 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());
        }

1 Ответ

8 голосов
/ 21 апреля 2010

Я считаю, что вы можете использовать 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());
}
...