2013-04-30 2 views
2

У меня есть некоторые запросы SQL Server, которые мне нужно преобразовать в SQL Server CE. Я, по меньшей мере, сталкиваюсь с некоторыми проблемами. Это то, что я работаю с:Замещение для DELETE INNER JOIN в SQL Server CE

DELETE FROM exSetData 
WHERE exSetData 
INNER JOIN Exercise ON exSetData.exName = Exercise.Name 
WHERE Exercise.Day = @name; 

Я начал пытаться использовать AND EXISTS в SQL Server CE, но я не верю, что он способен выполнять задачу мне нужно, и ясно, я использую это неправильно.

DELETE FROM exSetData 
WHERE EXISTS (Exercise.Name = exSetData.exName AND Exercise.Day = @name) 

Синтаксическая ошибка.

Как можно сделать такой же запрос в SQL Server CE?

Есть ли другие команды, которые вы бы посоветовали мне заглянуть? Я использую документацию Microsoft, однако это не так подробно в DELETE (на мой взгляд).

Я использую SQL Server CE 4.0, кстати.

Благодаря

ответ

4

Это должно работать, используя IN:

DELETE FROM exSetData 
WHERE exName IN (
    SELECT Name 
    FROM Exercise 
    WHERE Day = @name) 

SQL Fiddle Demo

В то время как я не могу проверить в СЕ, я думаю, что ваш оригинальный присоединиться синтаксис выключен и должен выглядеть следующим образом:

DELETE a 
FROM exSetData a 
    JOIN exercise e on a.exName = e.Name 
WHERE e.Day = @name 
+0

@ 40Alpha - np, рад, что я мог бы помочь. Какую ошибку вы получаете и с каким запросом? – sgeddes

+0

Я делал несколько запросов в одной команде. (Использование C# VS12) Например: sqlCeCommand foo = new sqlCeCommand (query1; query2; query3;). Я мог бы сделать это с помощью обычного sqlCommand, но, похоже, он не нравится в SQLCE, поэтому я сделал 3 разных вызова. – 40Alpha

1

Синтаксис для EXISTS:

DELETE FROM exSetData 
WHERE EXISTS 
(
     SELECT * FROM Exercise 
     WHERE Exercise.Name = exSetData.exName 
     AND Exercise.Day = @name 
)