Почему эта команда sql server CE не работает? - PullRequest
1 голос
/ 08 августа 2011

У меня есть команда:

INSERT INTO tbl_media
(DateAdded) VALUES (GetDate()) 
SELECT CAST(@@Identity AS int) 

Он отлично работает против стандартной базы данных sql, но не против базы данных CE. Я получаю следующую ошибку:

Ошибка выполнения SQL.

Executed SQL statement...
Error Source: SQL Server Compact ADO.NET Data Provider
Error Message: There was an error parsing the query. [Token line number = 2, Token line offset = 31, Token in error = )]

Позор, ошибка не более полезна, кто-нибудь знает, что может происходить?

Приветствия

ОБНОВЛЕНИЕ ::::::

После долгих раздумийвозиться с визуальным редактором студии (мусор) Я скачал порт данных и прочитал MSDN.Кажется, есть 2 проблемы ...

1) Недопустимый SELECT CAST (@@ Identity AS int) sql

SELECT @@ Identity *

2) SqlCeсерверу не нравится, когда я соединяю эти две команды:

INSERT INTO tbl_media (DateAdded) VALUES (getdate ()) SELECT @@ Identity

Если я выполняю вставку и выбираю по-разномураз тогда это работает.Так как мне обойти это?Я не могу сделать это в разное время. Мне нужно знать идентификатор объектов при их создании !!!

ОБНОВЛЕНИЕ 2:

Согласно очень полезному Эрику Э, вы не можете сделать 2 утвержденияв то же время.Поэтому следующие синтаксические разборы являются правильными, но работать не будут:

INSERT INTO tbl_media (DateAdded) VALUES (getdate ());SELECT @@ Identity;

Так что я действительно хочу знать, как я могу гарантировать, что идентичности не будут смешиваться при добавлении записей?

Т.е. что, если кто-то создает запись, пока кто-то получаетличность для одного они только что вставили?

Ответы [ 2 ]

4 голосов
/ 08 августа 2011

У вас есть дополнительные) Я не знаю, исправит ли это вашу ошибку, но посмотрите на ЗНАЧЕНИЯ, которые у вас есть

VALUES(GETDATE())) '<- один) доп. </p>

Измените это на:

INSERT INTO tbl_media(DateAdded) 
VALUES (GetDate()) 
SELECT CAST(@@Identity AS int) 
0 голосов
/ 08 августа 2011

Вы можете выполнить только одну инструкцию SQL на вызов ExecuteNonQuery. Таким образом, вы должны пролить в 2 звонка.

...