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

Откуда:
Сообщений: 11
Всем привет! Недавно тут совсем, да и базами недавно тока занимаюсь. По воле судьбы пришлось админить БД в вузе. Еще тока разбираюсь, но есть один косяк в базе. В общем суть: Имеется таблица (U_Apassports), в одном поле которой (NMB)забиты серия и номер документа, а в другом поле (SER) пусто. Нужно перекинуть первые 5 символов из NMB в SER, но только для тех записей у которых в поле SYSCODE имеется значение 3000.
Поддержка прислала в помощь такой запрос -

Update U_APassports Where 3000=U_APassports.SYSCODE

set U_APassports.SER:=SubStr(U_APassports.NMB,1,2), U_APassports.NMB:=SubStr(U_APassports.NMB,3,20);

не могу понять, как в итоге должен выглядеть sql-запрос..
29 май 13, 12:11    [14363923]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей_новичок
не могу понять, как в итоге должен выглядеть sql-запрос..

У вас точно Microsoft SQLServer ?
Потому что поддержка вам прислала именно sql-запрос.
29 май 13, 12:14    [14363952]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Glory
Алексей_новичок
не могу понять, как в итоге должен выглядеть sql-запрос..

У вас точно Microsoft SQLServer ?
Потому что поддержка вам прислала именно sql-запрос.


Система написана на Atlantis, наверно это на этом языке так выглядит запрос. Но я хочу через MS SQL-server managment (2008 r2 ) выполнить запрос.
пробую такой:
SELECT
1 UPDATE V$U_APassports
2 SET SER = LEFT(NMB, 5),
3 NMB = RIGHT(NMB, LEN(NMB) - 5)
4 WHERE SYSCODE = 3000

ругается "Сообщение 102, уровень 15, состояние 1, строка 2
Неправильный синтаксис около конструкции "1".
Сообщение 102, уровень 15, состояние 1, строка 4
Неправильный синтаксис около конструкции "2"."
30 май 13, 13:34    [14369826]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Алексей_новичок,

В запросах T-SQL не нужно нумеровать строки.
30 май 13, 13:35    [14369831]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей_новичок
Но я хочу через MS SQL-server managment (2008 r2 ) выполнить запрос.
пробую такой:


http://msdn.microsoft.com/en-us/library/ms177523(v=sql.105).aspx
30 май 13, 13:36    [14369834]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
Алексей_новичок,

Что там SELECT делает?
1 - это что за команда такая?
30 май 13, 13:36    [14369838]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
iap
Алексей_новичок,

Что там SELECT делает?
1 - это что за команда такая?


сорри, пока еще не шарю совсем..(((
30 май 13, 13:46    [14369919]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Алексей_новичок,

Так, может, лучше выполнять инструкции техподдержки? Кто будет отвечать, если вы вдруг испортите данные?
30 май 13, 14:03    [14370098]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Гость333,

резервную копию сделал, если что, откачу..
30 май 13, 14:14    [14370175]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Алексей_новичок,

UPDATE T$U_APASSPORTS
SET F$SER = SUBSTRING(F$NMB, 1, 5)
WHERE F$SYSCODE = 3000
Сообщение 4701, уровень 16, состояние 1, процедура T$U_APASSPORTS_U, строка 35
Не удалось найти объект "#xx$locks", так как он не существует, или отсутствуют разрешения.

помогите расшифровать)
30 май 13, 14:19    [14370244]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Алексей_новичок
помогите расшифровать)
Судя по всему, есть триггер T$U_APASSPORTS_U на update в таблице T$U_APASSPORTS. Он и ругается.
30 май 13, 14:23    [14370283]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Алексей_новичок,

На таблице есть триггер T$U_APASSPORTS_U, он срабатывает и выдаёт ошибку.
30 май 13, 14:24    [14370287]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Гость333,

и что посоветуете предпринять?
30 май 13, 14:26    [14370309]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Алексей_новичок,

Смотреть текст триггера и разбираться в причинах возникновения ошибки.
30 май 13, 14:27    [14370326]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Гость333,
первая строчка про триггер - ее смотреть?
create trigger T$U_APASSPORTS_U on T$U_APASSPORTS after Update as declare @rowCount int; select @rowCount = @@RowCount; if @RowCount = 0 return -- Return if no rows declare @db_name varchar(30), @OpFlags int; exec @OpFlags = master..na_getflagsfast @@SPI
30 май 13, 14:49    [14370518]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей_новичок
первая строчка про триггер - ее смотреть?


Сообщение 4701, уровень 16, состояние 1, процедура T$U_APASSPORTS_U, строка 35
30 май 13, 14:50    [14370536]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
И вы уверены, что такое изменение в обход штатных способов системы, не приведет печальным последствиям для этой самой системы ?
30 май 13, 14:52    [14370555]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Glory,
Вообще не очень. Система видимо настроена так, чтобы либо трудно вносить изменения в таблицы через MS SQL-srv, либо тока через встроенное средство самой системы (support). Наверно лучше в нем пробовать запрос.
30 май 13, 15:05    [14370675]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Алексей_новичок,

В общем выполнил запрос в штатном средстве системы такого вида

Update U_APassports Where 3000=U_APassports.SYSCODE

set U_APassports.SER:=SubStr(U_APassports.NMB,1,2), U_APassports.NMB:=SubStr(U_APassports.NMB,3,20);

Но получилось следующее - 2 знака перетянулось в поле SER, и в тех записях у которых поле было уже заполнено верно. и информация обновилась в нем на неверную.
Получается нужно задать условие, чтобы запрос выполнялся при условии, что поле SER пустое. Как бы это могло выглядеть?
30 май 13, 15:41    [14371009]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей_новичок
Как бы это могло выглядеть?

Как еще одно условие в Where
30 май 13, 15:43    [14371020]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Glory,
тогда должно выглядеть так
Where <4 любые знака>=U_APassports.NMB

НО как обозначить <4 любые знака>?
30 май 13, 16:00    [14371151]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей_новичок
НО как обозначить <4 любые знака>?

Вы наверное хотели сказать размер значения в поле U_APassports.NMB должен быть 4 символа ?
30 май 13, 16:04    [14371195]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Алексей_новичок
Member

Откуда:
Сообщений: 11
Glory,
Не, наврал я. Вообще условие про поле SER надо. Т.е. если в поле SER пусто, то выполнять запрос, а если есть любые 4 символа, то не выполнять. Проще наверно задать условие, что если поле SER пустое. Это обозначается как NULL?
30 май 13, 16:11    [14371245]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей_новичок
Т.е. если в поле SER пусто, то выполнять запрос, а если есть любые 4 символа, то не выполнять

А если есть 5 символов ?
30 май 13, 16:12    [14371251]     Ответить | Цитировать Сообщить модератору
 Re: Перекинуть из поля в поле  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Алексей_новичок
задать условие, что если поле SER пустое. Это обозначается как NULL?

Это надо смотреть, как ваша система записывает пустые значения в SER. Может, как NULL, а может, как пустую строку. И дальше либо смотреть документацию по системе, либо снова трясти техподдержку, чтобы помогли составить запрос на местном диалекте SQL.
30 май 13, 16:21    [14371319]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить