Sql Server Ce 3.5 Идентификационная вставка

возникла проблема с столбцами идентификаторов в Sql Server CE

при использовании проводника сервера в VS2008 выполнение следующего скрипта

УСТАНОВИТЕ тестовую таблицу IDENTITY_INSERT ON; Вставить в testTable (id,name) значения (1,'Something') SET IDENTITY_INSERT testTable ON;

отправляет следующее сообщение об ошибке «Конструкция или оператор Set SQL не поддерживается». но потом вставляет строку нормально?!?!?!

в любом случае, когда я пытаюсь сделать то же самое через С#, указав этот скрипт в качестве текста команды, он не говорит, что ошибка была в «Вставить ключевое слово»

Я понимаю, что против SQL SERVER CE команда принимает только одну пакетную команду за раз, поэтому в этом случае у нас есть три команды (это будет работать с полным SQLServer), есть идеи?


person Bee gud    schedule 25.03.2009    source источник
comment
может ли это быть пропавшим без вести; между INSERT и вторым SET?   -  person KM.    schedule 25.03.2009


Ответы (2)


Если вы используете SqlCe 3.5, это должно работать. Однако вам нужно отправить его как две отдельные команды. Вы не можете разделить команды с помощью ";" или "GO" в SqlCe. Скорее, вам нужно сделать что-то вроде этого:

            SqlCeConnection connection = new SqlCeConnection(connectionString);
            SqlCeCommand identChangeCommand = connection.CreateCommand();
            identChange.CommandText = "SET IDENTITY_INSERT SomeTable ON";
            SqlCeCommand cmd = connection.CreateCommand();
            cmd.CommandText = "INSERT INTO testTable (Id, column1, column2..) VALUES (10,val1,val2...)";
            try
            {
                connection.Open();
                identChange.ExecuteNonQuery();
                cmd.ExecuteNonQuery();
            }

            catch (SqlCeException ex)
            {
                //log ex
            }
            finally
            {
                connection.Close();
            }
person BFree    schedule 25.03.2009
comment
хорошо, это сработало просто отлично. спасибо большое! Я пытался использовать одну команду отдельно, установив вставку_идентити в моей winform, и это было нормально, но после этого я не смог сделать вставку. Но, как и ваш пример, делает именно то, что я хотел =). ваше здоровье - person Bee gud; 26.03.2009

ПЫТАТЬСЯ

SET IDENTITY_INSERT testTable ON; 
Insert into testTable (id,name) values (1,'Something');
SET IDENTITY_INSERT testTable OFF;

OR

SET IDENTITY_INSERT testTable ON
go
Insert into testTable (id,name) values (1,'Something')
go
SET IDENTITY_INSERT testTable OFF
go
person KM.    schedule 25.03.2009
comment
GO — это концепция, которая существует только в инструментах — настоящий синтаксический анализатор не использует их для различения чего-либо. - person Jason Short; 28.04.2009
comment
@ Джейсон Шорт, ты ошибаешься! сделайте следующее: напечатайте 'ОШИБКА!!!' создайте процедуру xyz как Print «это не будет работать без GO». добавив GO после печати «ОШИБКА!!!», это сработает - person KM.; 28.04.2009
comment
@KM: SQLCE все равно не поддерживает хранимые процедуры. - person ; 23.11.2009
comment
@ Брайан Уилкинс, затем сделайте то же самое, но создайте представление, а не процедуру, вы получите ту же ошибку. - person KM.; 24.11.2009
comment
Второй вариант отлично работал у меня в SQL Server Management Studio. - person Ryan Kirkman; 02.08.2012
comment
go не является транзакцией -SQL и обрабатывается только такими утилитами, как SSMS или SMO, в качестве разделителя пакетов. Попробуйте отправить второй пример кода непосредственно на SQL-сервер через SqlCommand: он не работает из-за недопустимого синтаксиса. См. также здесь. - person Frédéric; 30.04.2017