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

Откуда:
Сообщений: 9
Здравствуйте. Вобщем есть условие с запросом вида:

	   IF (SELECT поле FROM таблица WHERE поле = @значение) = ''
		BEGIN					
		    INSERT INTO таблица 
                    SELECT *
		    FROM таблица
		    WHERE поле = @значение;
		END
		ELSE
		BEGIN
		   UPDATE таблица
		   SET поле1 = @значение1
		   WHERE поле = @значение
		END


Не работает условие, т.к. IF (SELECT поле FROM таблица WHERE поле = @значение) = '' почемуто всегда отрабатывает на false, т.е. insert у меня никогда не получается. Что не так?
14 июн 13, 13:00    [14433286]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
qwerty112
Guest
Tolikv
Не работает условие

не работают - негры в Африке
IF not exists(SELECT 1 FROM таблица WHERE поле = @значение)
14 июн 13, 13:03    [14433307]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
L0rd
Member

Откуда:
Сообщений: 6
Tolikv
Здравствуйте. Вобщем есть условие с запросом вида:
Не работает условие, т.к. IF (SELECT поле FROM таблица WHERE поле = @значение) = '' почемуто всегда отрабатывает на false, т.е. insert у меня никогда не получается. Что не так?

По вашей логике получается так:
если по селекту получено известное(не нулевое NULL, а именно известное) значение
ну допустим, там был пробел, а потом он был удален
тогда происходит вставка записи
попробуйте подобным запросом выбрать необходимые записи из таблицы
SELECT поле FROM таблица WHERE поле = @значение and поле = ''

посмотрите, есть ли такие вообще
14 июн 13, 13:15    [14433368]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Tolikv
Member

Откуда:
Сообщений: 9
qwerty112
IF not exists(SELECT 1 FROM таблица WHERE поле = @значение)


not exists не помогает уже пробовал (

L0rd
попробуйте подобным запросом выбрать необходимые записи из таблицы
SELECT поле FROM таблица WHERE поле = @значение and поле = ''

посмотрите, есть ли такие вообще


В том то и дело что таких (SELECT поле FROM таблица WHERE поле = '') значений нет в таблице - она вся заполнена, НО есть @значения которых нет в этой таблице, и при selecte естественно я ничего не нахожу но как это прописать в условии что я ничего не нашел?
14 июн 13, 13:45    [14433600]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
user89
Member

Откуда:
Сообщений: 2083
Tolikv,

а версия сервера какая? Если >= 2008, то лучше использовать merge
14 июн 13, 13:45    [14433610]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
user89
Tolikv,

а версия сервера какая? Если >= 2008, то лучше использовать merge
Он SELECT-то толком написать не может
14 июн 13, 13:49    [14433637]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Tolikv
	   IF <условие>
		BEGIN					
		    INSERT INTO таблица 
                    SELECT *
		    FROM таблица
		    WHERE поле = @значение;
		END

То есть в случае, если выполняется некоторое условие, вы хотите продублировать в таблице все записи, у которых поле = @значение?
14 июн 13, 13:52    [14433658]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Tolikv
Member

Откуда:
Сообщений: 9
Давайте опишу что хочу, в t-sql я вобще новичек сильно не пинайте)
Мне нужно сравнить 2 таблицы в базах на разных серверах (merge не подходит она работает только на одном сервере) версия sql 2005. Прохожу по одной базе курсором и ищу совпадения во второй, если есть совпадение то апдейтю строку, если нет - то инсертю. Вот както так
14 июн 13, 14:18    [14433898]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Tolikv
merge не подходит она работает только на одном сервере
Откуда такие сведения?
Tolikv
версия sql 2005.
А вот это серьёзно: MERGE появился только в SQL2008
14 июн 13, 14:23    [14433937]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
qwerty112
Guest
Tolikv
qwerty112
IF not exists(SELECT 1 FROM таблица WHERE поле = @значение)


not exists не помогает уже пробовал (

так его не прикладывать нужно !
а пить натощак !
14 июн 13, 14:30    [14434009]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Tolikv
Давайте опишу что хочу, в t-sql я вобще новичек сильно не пинайте)
Мне нужно сравнить 2 таблицы в базах на разных серверах (merge не подходит она работает только на одном сервере) версия sql 2005. Прохожу по одной базе курсором и ищу совпадения во второй, если есть совпадение то апдейтю строку, если нет - то инсертю. Вот както так

курсор для таких задач будет работать очень медленно, надо сделать двумя запросами - один на апдейт, другой на инсерт.
update trg
set trg.field = src.field
from src
       inner join trg
      on trg.id = src.id

insert into trg(field)
select
src.field
from src
where not exists(select 1 from trg where trg.id = src.id)

Вот примерная схема запросов. Естественно обернуть в транзакцию, вывод ошибок и все такое.
14 июн 13, 14:35    [14434049]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

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

1. Выбросить курсор. Совсем.
2. Проапдейтить таблицу джойном двух таблиц с условием неравенства в них [поле1] (возможно, надо обработать и значение NULL)
3. Вставить записи из SELECTа с предикатом NOT EXISTS
14 июн 13, 14:37    [14434060]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Tolikv
Member

Откуда:
Сообщений: 9
Всем спасибо за помощь
17 июн 13, 05:46    [14439908]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить