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

Откуда:
Сообщений: 43
Здравствуйте. Есть необходимость запросить у пользователя поле, значение которого он хочет изменить и затем соответственно изменить значение этого поля. Вот так ошибки:
CREATE PROCEDURE ChangeInformation
@Фамилия char,
@Имя char,
@Отчество char,
@Поле char,
@Информация char,
AS
UPDATE Учащиеся SET (Учащиеся.@Поле = @Информация)
WHERE (Фамилия_учащегося = @Фамилия, Имя_учащегося = @Имя, Отчество_учащегося = @Отчество)
20 май 16, 16:08    [19199297]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
IgorGalimski,

автор
char

это для китайцев программа? хотя и они вроде минимум 2мя обходятся
20 май 16, 16:16    [19199362]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
автор
WHERE (Фамилия_учащегося = @Фамилия, Имя_учащегося = @Имя, Отчество_учащегося = @Отчество)

через запятую условия на каком языке?
20 май 16, 16:17    [19199369]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
На русском
20 май 16, 16:23    [19199423]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
_djХомяГ
Guest
IgorGalimski
На русском

А нужно на T-SQL
20 май 16, 16:25    [19199459]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Мне нужно, чтобы вместо @Поле подставилось название поля, которое я введу
UPDATE Учащиеся SET (Учащиеся.@Поле = @Информация)
20 май 16, 17:02    [19199740]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
IgorGalimski
Мне нужно, чтобы вместо @Поле подставилось название поля, которое я введу
UPDATE Учащиеся SET (Учащиеся.@Поле = @Информация)

динамический запрос, но правильнее расширить процедуру до всех полей и передавать конкретное и его изменять
20 май 16, 17:04    [19199748]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
А как если через динамический?
20 май 16, 17:16    [19199796]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4539
IgorGalimski, FAQ
20 май 16, 17:18    [19199803]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Попробовал. Не получилось:
CREATE PROCEDURE ChangeInformation_7
@Фамилия varchar(20),
@Имя varchar(20),
@Отчество varchar(20),
@Поле varchar(20),
@Информация varchar(20)
AS
EXEC
(
	UPDATE Учащиеся SET @Поле = @Информация
	WHERE (Фамилия_учащегося = @Фамилия AND Имя_учащегося = @Имя AND Отчество_учащегося = @Отчество)
)
20 май 16, 18:12    [19200010]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
IgorGalimski
Попробовал. Не получилось:
CREATE PROCEDURE ChangeInformation_7
@Фамилия varchar(20),
@Имя varchar(20),
@Отчество varchar(20),
@Поле varchar(20),
@Информация varchar(20)
AS
EXEC
(
	UPDATE Учащиеся SET @Поле = @Информация
	WHERE (Фамилия_учащегося = @Фамилия AND Имя_учащегося = @Имя AND Отчество_учащегося = @Отчество)
)
Вы видите разницу между своим кодом и FAQ?
--  Ваш код
EXEC
(
	UPDATE Учащиеся SET @Поле = @Информация
	WHERE (Фамилия_учащегося = @Фамилия AND Имя_учащегося = @Имя AND Отчество_учащегося = @Отчество)
)

--  FAQ
DECLARE @SQL varchar(8000), @table_name varchar(10)
SET @SQL = 'SELECT * FROM ' + @table_name

exec(@SQL)
20 май 16, 18:50    [19200132]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
К сожалению, я не знаю как сделать так
20 май 16, 19:04    [19200168]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
iap
Member

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

имя поля обычно не начинается с символа @. Этот символ имеет своё особое значение в TSQL.
И удалите, наконец, круглые скобки. Зачем они?

Для чего, по-вашему, служит EXEC()?
20 май 16, 19:07    [19200183]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
IgorGalimski
К сожалению, я не знаю как сделать так
А вы поняли смысл конструкции exec(@SQL), зачем она, что делает, что такое @SQL, и что там должно быть?
21 май 16, 02:42    [19201286]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
CREATE PROCEDURE ChangeInformation_7
@Фамилия varchar(20),
@Имя varchar(20),
@Отчество varchar(20),
declare @Поле varchar(20),
@Информация varchar(20)
AS
	EXEC UPDATE Учащиеся SET @Поле = @Информация
	WHERE (Фамилия_учащегося = @Фамилия AND Имя_учащегося = @Имя AND Отчество_учащегося = @Отчество)
21 май 16, 10:50    [19201597]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
CREATE PROCEDURE ChangeInformation_7
DECLARE @SET @Фамилия varchar(20), @Имя varchar(20), @Отчество varchar(20), @Поле varchar(20), @Информация varchar(20)
AS
SET @SQL=(UPDATE Учащиеся SET @Поле = @Информация
	WHERE (Фамилия_учащегося = @Фамилия AND Имя_учащегося = @Имя AND Отчество_учащегося = @Отчество))
	
exec(@SQL)
21 май 16, 11:02    [19201611]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
iljy
Member

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

Вы че, в угадайку играете? Почитать в хелпе примеры на EXEC не пробовали?
21 май 16, 11:16    [19201627]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Почитал. Делаю также. Не работает.
21 май 16, 11:20    [19201634]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
IgorGalimski
Почитал. Делаю также. Не работает.
Если бы прочитали и делали также, то работало бы.
А вы занимаетесь выдумыванием собственного синтаксис и почему-то надеетесь, что это сработает.
21 май 16, 11:38    [19201656]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Подскажите, пожалуйста, в каком месте не так
21 май 16, 11:40    [19201661]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
IgorGalimski
Подскажите, пожалуйста, в каком месте не так
Вам уже подсказывали - 19200132
21 май 16, 11:57    [19201689]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Не могу понять(
21 май 16, 12:18    [19201746]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
iljy
Member

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

1. Параметр EXEC() - это строковая константа либо переменная строкового типа
2. Строковые константы указываются в одинарных кавычках
21 май 16, 12:23    [19201766]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
IgorGalimski
Member

Откуда:
Сообщений: 43
Всё равно не так
CREATE PROCEDURE ИзменениеИнф_7
declare @Фамилия varchar(20),
@Имя varchar(20),
@Отчество varchar(20),
@Поле varchar(20),
@Информация varchar(20),
@SQL varchar(8000),
AS
	SET @SQL = 'UPDATE Учащиеся SET'+ @Поле = @Информация
	WHERE (Фамилия_учащегося = @Фамилия AND Имя_учащегося = @Имя AND Отчество_учащегося = @Отчество)
EXEC(@SET)
21 май 16, 12:57    [19201823]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поля, которое нужно изменить  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
IgorGalimski
Не могу понять(
Что не можете понять?
Вы хоть расскажите, что у вас вызывает затруднения.

Вы на эти вопросы для себя ответили?
alexeyvg
А вы поняли смысл конструкции exec(@SQL), зачем она, что делает, что такое @SQL, и что там должно быть?
21 май 16, 23:05    [19203216]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить