Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите как сделать проверку на то, что если такая запись есть то не добавлять а если нету записи то добавлять.

Знаю только что через not exist можно.


INSERT INTO EstimateWorkgroups
    SELECT [EstimateID],132001,31,[STATUS],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
    FROM EstimateWorkgroups E1  
    WHERE E1.ActorID = 6432000



Делаю вот так но ошибка...

 not EXISTS (SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 6432000)
	
INSERT INTO EstimateWorkgroups
	SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 6432000
22 янв 16, 12:18    [18715056]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pabl0
Делаю вот так но ошибка...

А почему вы ваш not EXISTS поместили до своего запроса, в не в свой запрос ?
22 янв 16, 12:21    [18715070]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Pabl0,

это где такой синтаксис описывается?
Или сами придумали?

Непонятно: вставляете запись в EstimateWorkgroups селектом из неё же, если в ней, однако же, этой записи нет?
Логично, ничего не скажешь!
22 янв 16, 12:22    [18715075]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
INSERT INTO EstimateWorkgroups
	SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 6432000


Вот так вообще делал. Но надо еще проверку.
22 янв 16, 12:24    [18715083]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pabl0
Вот так вообще делал. Но надо еще проверку.

Какую проверку, если у вас INSERT и SELECT из одной таблицы ?
22 янв 16, 12:27    [18715098]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Да, что есть запись такая уже или нету.
22 янв 16, 12:30    [18715117]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Pabl0
Да, что есть запись такая уже или нету.
И если нет, то откуда она возьмётся?...
22 янв 16, 12:33    [18715130]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pabl0
Да, что есть запись такая уже или нету.

Если ее нет, то в ваш INSERT ничего не попадет

Вы уверены, что решаете именно ту задачу, что вам поставили ?
22 янв 16, 12:34    [18715139]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Если нету то Insertom я её добавляю.

Да, сейчас у меня просто в условие WHERE E1.ActorID = 6432000 вставляется 132001 а мне нужно что бы проверялось перед добавлением есть в WHERE E1.ActorID = 6432000 такой человек 132001 или нету.

И если нету то делать добавление, а если есть то не добавлять.
22 янв 16, 12:41    [18715198]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
IF NOT EXISTS (SELECT * FROM EstimateWorkgroups WHERE ActorID = 6432000)
   INSERT...
22 янв 16, 12:54    [18715285]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
INSERT INTO EstimateWorkgroups
	SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 6432000 AND NOT EXISTS (
		
	SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 6432000
	)


Так уже близко к истине? :)
22 янв 16, 12:56    [18715293]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pabl0
Так уже близко к истине? :)

Вы понимаете, что вы написали то ?
Если
SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
FROM EstimateWorkgroups E1
WHERE E1.ActorID = 6432000
не вернет записей, то зачем нужна еще раз выполнить _этот же_ запрос в NOT EXISTS ?
22 янв 16, 12:59    [18715311]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Можете тогда подсказать как должно быть?
22 янв 16, 13:04    [18715343]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Jaroslav Tavgen
Member

Откуда:
Сообщений: 1
IF NOT EXISTS (SELECT [EstimateID],132001,31,[STATUS],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received] FROM EstimateWorkgroups E1 WHERE E1.ActorID = 6432000) AS row_to_insert INSERT row_to_insert

?
22 янв 16, 13:35    [18715580]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
Jaroslav Tavgen,

это что за синтаксис?
22 янв 16, 13:37    [18715591]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
на то, что если такая
Guest
Pabl0,

подставляемые цифры (132001,31, 0) нужно добавить в where в not exists
перечень полей в select в not exists не нужен - он не работает, игнорируется. это поля выборки, а не проверки.
сейчас в where в not exists стоит тот же ID, по которому insert формируется. эсли этот id не существует (not exists), то и для инсерта не найдется такой строки.
22 янв 16, 13:57    [18715790]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
        INSERT INTO EstimateWorkgroups
	SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 5980000 AND 

NOT EXISTS (SELECT *
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 132001 OR E1.JobID = 31 OR E1.Share = 0)


Делаю вот так, правильно? Только он не срабатывает :(
22 янв 16, 14:40    [18716140]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pabl0
Только он не срабатывает

Вы еще раз 100 запустите этот запрос.
Может сервер над вами сжалится и сделает то, что вам надо, а не то, что вы написали
22 янв 16, 14:42    [18716156]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Pabl0
Делаю вот так, правильно? Только он не срабатывает :(
Вы возьмите учебник по SQL, и потренируйтесь на простой табличке из одного поля.

Сейчас вы выполняете такой запрос:

- Положить в сумку батон хлеба
- Взяв его из сумки
- При условии, что в сумке его нет.
22 янв 16, 14:51    [18716225]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Pabl0
        INSERT INTO EstimateWorkgroups
	SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 5980000 AND 

NOT EXISTS (SELECT *
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 132001 OR E1.JobID = 31 OR E1.Share = 0)



Делаю вот так, правильно? Только он не срабатывает :(
Значит, такая запись уже есть?
Однако, после INSERT EstimateWorkgroups перечислите в скобках поля, в которые вставляете.
В WHERE оператор OR. Это правильно? Может, всё-таки, AND?
22 янв 16, 14:52    [18716231]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
alexeyvg
Pabl0
Делаю вот так, правильно? Только он не срабатывает :(
Вы возьмите учебник по SQL, и потренируйтесь на простой табличке из одного поля.

Сейчас вы выполняете такой запрос:

- Положить в сумку батон хлеба
- Взяв его из сумки
- При условии, что в сумке его нет.
На этот раз он берёт запись E1.ActorID = 5980000
и проверяет наличие записи E1.ActorID = 132001.
Однако, всё портят OR
22 янв 16, 14:54    [18716241]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
INSERT INTO EstimateWorkgroups
	SELECT [EstimateID],132001,31,[Status],[Author],[ROLE],0,[RatingCl],[RatingPr],[RatingRe],[Rating],[bonus],[Version],[Received]
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 5980000 AND 

NOT EXISTS (SELECT *
	FROM EstimateWorkgroups E1	
	WHERE E1.ActorID = 132001 OR E1.JobID = 31 OR E1.Share = 0)


Я сделал AND но не чего не изменилось :(
22 янв 16, 15:37    [18716654]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Pabl0
Member

Откуда:
Сообщений: 265
И ошибка вот такая: Violation of PRIMARY KEY constraint 'PK_EstimateWorkgroups'. Cannot insert duplicate key in object 'dbo.EstimateWorkgroups'.
22 янв 16, 15:39    [18716677]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pabl0
Я сделал AND но не чего не изменилось :(

Начните с написания такого SELECT-а, который просто выведет вам те данные, которые вы потом где-то будете использовать
22 янв 16, 15:40    [18716679]     Ответить | Цитировать Сообщить модератору
 Re: Проверка в SQL  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
Pabl0
И ошибка вот такая: Violation of PRIMARY KEY constraint 'PK_EstimateWorkgroups'. Cannot insert duplicate key in object 'dbo.EstimateWorkgroups'.


EstimateID у вас PK? уберите его из INSERT
22 янв 16, 16:16    [18716927]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить