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

Откуда:
Сообщений: 8
Здравствуйте!

Возникла проблема с написанием хранимой процедуры. Задача следующая: в обычном select запросе с некоторым условием where выводится таблица. В этой таблице необходимо обновить одно из полей каждой строки (то есть нужно сделать апдейт параметра во все таблице, которая получилась по запросу select), при этом этот апдейт это заполняемое клинтом поле (их несколько, столько сколько вывелось строк по запросу select, но заранее неизвестно сколько), т.е. некоторая внешняя переменная, должна передаваться хранимой процедуре, а та уже сделать update нужной строки. Возможно ли это сделать с помощью хранимой процедуры?

Спасибо.
5 окт 09, 02:25    [7740545]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
ligth123,

Да, можно написать хранимку на апдэйт всех полей удовлетворяющих вашему условию выборки на клиента, и передавать ей все поля (и изменённые клиентом и нет).
5 окт 09, 04:03    [7740587]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
ligth123
Member

Откуда:
Сообщений: 8
не подскажите ход шагов, или может быть пример кода, пожалуйста
5 окт 09, 10:44    [7741245]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
vino
Member

Откуда:
Сообщений: 1191
вот так вопрос "Возможно ли это сделать с помощью хранимой процедуры?"
ligth123
...Задача следующая: в обычном select запросе с некоторым условием where выводится таблица. В этой таблице необходимо обновить одно из полей каждой строки (то есть нужно сделать апдейт параметра во все таблице, которая получилась по запросу select)...
обновить в таблице-источнике или в результирующей выборке?
ligth123
... при этом этот апдейт - это заполняемое клинтом поле (их несколько, столько сколько вывелось строк по запросу select, но заранее неизвестно сколько), т.е. некоторая внешняя переменная, должна передаваться хранимой процедуре, а та уже сделать update нужной строки.
поясните, что именно должно передаваться в параметре - новое значение определенного поля, или пара "поле=значение", или еще что?
5 окт 09, 12:32    [7742095]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
ligth123
Здравствуйте!

Возникла проблема с написанием хранимой процедуры. Задача следующая: в обычном select запросе с некоторым условием where выводится таблица. В этой таблице необходимо обновить одно из полей каждой строки (то есть нужно сделать апдейт параметра во все таблице, которая получилась по запросу select), при этом этот апдейт это заполняемое клинтом поле (их несколько, столько сколько вывелось строк по запросу select, но заранее неизвестно сколько), т.е. некоторая внешняя переменная, должна передаваться хранимой процедуре, а та уже сделать update нужной строки. Возможно ли это сделать с помощью хранимой процедуры?

Спасибо.

т.е. для каждой строки пользователь может ввести своё значение?
5 окт 09, 12:44    [7742179]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
ligth123
не подскажите ход шагов, или может быть пример кода, пожалуйста

пишете хранимку вида:

CREATE PROCEDURE test
@Id int,
@Name varchar(50)
...<все ваши параметры>
AS
UPDATE <ваша_таблица> SET name = @name, <столбцы таблицы>=<ваши параметры>
WHERE id = @Id

затем пишете ADO.NET команду, использующую хранимку, инициализируете параметры и соединение, и выполняете - http://msdn.microsoft.com/en-us/library/3btz0xwf.aspx
5 окт 09, 14:07    [7742773]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
ligth123
Member

Откуда:
Сообщений: 8
есть строка (id, fio, name, grup), делается выборка по полю grup, в результате получаем таблицу с неизвестным заранее кол-вом строк, пользователь у этих выбранных строк может поменять поле name (в любой строке), поэтому и вопрос как передать неизвестное заранее кол-во параметров, и выполнить при этом условие set при неизвестных заранее id
5 окт 09, 19:04    [7744900]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
ligth123
Member

Откуда:
Сообщений: 8
при этом выборка этих параметров id,fio,name из разных таблиц (join). В первой таблице (id,fio) во второй (id, name)
5 окт 09, 19:07    [7744918]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
vino
Member

Откуда:
Сообщений: 1191
ligth123
есть строка (id, fio, name, grup), делается выборка по полю grup, в результате получаем таблицу с неизвестным заранее кол-вом строк, пользователь у этих выбранных строк может поменять поле name (в любой строке), поэтому и вопрос как передать неизвестное заранее кол-во параметров, и выполнить при этом условие set при неизвестных заранее id
очень странная формулировка - заранее количество выбираемых строк не известно, а как пользователь хочет менять в каждой строке name - известно? если пользователь хочет просто "забить" поле name одним каким-то значением, тогда проблемы нет - все просто решается
5 окт 09, 19:08    [7744924]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
ligth123
Member

Откуда:
Сообщений: 8
допустим в поле grup состоит из значений 1,2,3
выборка по = 3
вывелось 5строк, при grup = 2 вывелось 6строк, поэтому кол-во параметров вроде как заранее неизвестно, пользователь видит выведенную при выборке таблицу, но как передать изменения?
5 окт 09, 19:39    [7745028]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
vino
Member

Откуда:
Сообщений: 1191
ligth123
допустим в поле grup состоит из значений 1,2,3
выборка по = 3
вывелось 5строк, при grup = 2 вывелось 6строк, поэтому кол-во параметров вроде как заранее неизвестно, пользователь видит выведенную при выборке таблицу, но как передать изменения?
может, стоит начать со смысла задачи? какого рода изменения нужны?
телепаты стоят дорого!! а пока ваш вопрос все больше напоминает "а где в программе кнопка, которая все сделает сама?"
Если изменения делает пользователь, то ему выдаются строки и он их меняет, затем они записываются обратно в БД. А вы говорите про непонятные автоматические изменения. В любом случае схема БД-Клиент-БД верна, только в качестве клиента может выступать программа. Если изменения можно формализовать и автоматизировать, то делайте их в нужные моменты времени одним оператором
UPDATE таблица SET поле=значение WHERE grup=одно из значений 1,2 или 3
или
UPDATE таблица SET поле=CASE grup WHEN 1 THEN значение1 WHEN 2 THEN значение2 ELSE значение3 END WHERE grup in (1,2,3)
6 окт 09, 10:37    [7746412]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
ligth123
допустим в поле grup состоит из значений 1,2,3
выборка по = 3
вывелось 5строк, при grup = 2 вывелось 6строк, поэтому кол-во параметров вроде как заранее неизвестно, пользователь видит выведенную при выборке таблицу, но как передать изменения?

Кажется понял, что вы хотите. Выгрузить в таблицу на клиенте какие-то данные, наменять там кучу всего и всё вместе залить в базу. Правильно? И насколько я понял, каждая запись у вас уникально идентифицируется полем id. В таком случае вам всё равно придётся апдэтить каждую изменённую запись по отдельности вызовом хранимки.
6 окт 09, 11:33    [7746826]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
ligth123
Member

Откуда:
Сообщений: 8
Denis Reznik,
да, это именно то что я хочу :), не подскажите каким образом это можно оформить?
7 окт 09, 08:46    [7751228]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
ligth123
да, это именно то что я хочу :), не подскажите каким образом это можно оформить?

кака же вы мысли -то через жопу выражаете. Данные на клиенте сериализовать в xml, xml передать в процудуру и там уже обновить данные скопом.
7 окт 09, 09:48    [7751482]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
ligth123
Member

Откуда:
Сообщений: 8
как умеем, можно чуть подробнее, что именно делать нужно
7 окт 09, 14:45    [7753784]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
Влом регистрироваться
Guest
ligth123,

нужно почитать букварь по работе с данными и созданию приложений БД.
7 окт 09, 14:50    [7753820]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
vino
Member

Откуда:
Сообщений: 1191
ligth123, вас все еще не насторожила эта фраза?
Denis Reznik
ligth123
допустим в поле grup состоит из значений 1,2,3
выборка по = 3
вывелось 5строк, при grup = 2 вывелось 6строк, поэтому кол-во параметров вроде как заранее неизвестно, пользователь видит выведенную при выборке таблицу, но как передать изменения?

Кажется понял, что вы хотите. Выгрузить в таблицу на клиенте какие-то данные, наменять там кучу всего и всё вместе залить в базу. Правильно? И насколько я понял, каждая запись у вас уникально идентифицируется полем id. В таком случае вам всё равно придётся апдэтить каждую изменённую запись по отдельности вызовом хранимки.
откуда такое упорное желание сделать хранимку там, где данные уже слиты клиенту и он может их менять
В данном случае обычно клиент формирует текст из операторов UPDATE и отправляет их на выполнение, а вы все-еще хотите динамические запросы строить в хранимке?
7 окт 09, 15:04    [7753924]     Ответить | Цитировать Сообщить модератору
 Re: обновление данных с помощью хранимой процедуры  [new]
ligth123
Member

Откуда:
Сообщений: 8
В качестве клиента используется приложение Microsoft InfoPath и поэтому стараемся использовать его возможности, и комплекс из операторов update сделать кажется достаточно трудным
9 окт 09, 11:17    [7763110]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить