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

Откуда:
Сообщений: 33
Вот такая псевдопроцедура:
CREATE PROCEDURE addWeight
	@weight INT,
	@name VARCHAR(40),
        @column VARCHAR(40),
AS
INSERT INTO TWeight(time, file_id)
VALUES (@weight, SELECT TOP 1 @column FROM @name ORDER BY @column DESC;);

Подскажите как результат запроса SELECT TOP 1 @column FROM @name ORDER BY @column DESC; записать в поле file_id таблицы TWeight.
Подскажите как это сделать без программы на ЯП, в чистом T-SQL.
27 июн 13, 16:07    [14492694]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Nawy, тема "ТОП 10" вопрос номер 6
27 июн 13, 16:13    [14492746]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Nawy
Вот такая псевдопроцедура:
CREATE PROCEDURE addWeight
	@weight INT,
	@name VARCHAR(40),
        @column VARCHAR(40),
AS
INSERT INTO TWeight(time, file_id)
VALUES (@weight, SELECT TOP 1 @column FROM @name ORDER BY @column DESC;);

Подскажите как результат запроса SELECT TOP 1 @column FROM @name ORDER BY @column DESC; записать в поле file_id таблицы TWeight.
Подскажите как это сделать без программы на ЯП, в чистом T-SQL.

Что-то типа такого, наверное
CREATE PROCEDURE addWeight
	@weight INT,
	@name VARCHAR(40),
        @column VARCHAR(40)
AS
DECLARE @sql varchar(max)
SET @sql=N'
INSERT INTO TWeight(time, file_id)
SELECT '+CONVERT(varchar,@weight)+', (SELECT TOP 1 '+CONVERT(varchar,@column)+' FROM '+CONVERT(varchar,@name)+' ORDER BY '+CONVERT(varchar,@column)+' DESC)';
EXEC(@sql)
27 июн 13, 16:15    [14492763]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Сергей Викт.
CONVERT(varchar,@column) CONVERT(varchar,@name)

тут можно не конвертить varchar в varchar :)
27 июн 13, 17:02    [14493223]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Владимир Затуливетер
Сергей Викт.
CONVERT(varchar,@column) CONVERT(varchar,@name)


тут можно не конвертить varchar в varchar :)
VARCHAR(40) преобразуется в VARCHAR(30), однако!
Кто его знает! Может, так и надо?
27 июн 13, 17:06    [14493252]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Сергей Викт.
Member

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

тут можно не конвертить varchar в varchar :)
VARCHAR(40) преобразуется в VARCHAR(30), однако!
Кто его знает! Может, так и надо?

я перестраховался просто:) Мало ли)
27 июн 13, 17:12    [14493291]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Сергей Викт.
iap
пропущено...
VARCHAR(40) преобразуется в VARCHAR(30), однако!
Кто его знает! Может, так и надо?

я перестраховался просто:) Мало ли)
Тогда надо было использовать для названий объектов БД тип sysname.
Который базируется на NVARCHAR(128)
27 июн 13, 17:13    [14493305]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
EXEC()-то всё равно @SQL преобразует в NVARCHAR(MAX)
Так что лучше сразу использовать юникод
и перед литеральными строками ставить букву N
27 июн 13, 17:15    [14493319]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Сергей Викт.
Nawy
Вот такая псевдопроцедура:
CREATE PROCEDURE addWeight
	@weight INT,
	@name VARCHAR(40),
        @column VARCHAR(40),
AS
INSERT INTO TWeight(time, file_id)
VALUES (@weight, SELECT TOP 1 @column FROM @name ORDER BY @column DESC;);

Подскажите как результат запроса SELECT TOP 1 @column FROM @name ORDER BY @column DESC; записать в поле file_id таблицы TWeight.
Подскажите как это сделать без программы на ЯП, в чистом T-SQL.

Что-то типа такого, наверное
CREATE PROCEDURE addWeight
	@weight INT,
	@name VARCHAR(40),
        @column VARCHAR(40)
AS
DECLARE @sql varchar(max)
SET @sql=N'
INSERT INTO TWeight(time, file_id)
SELECT '+CONVERT(varchar,@weight)+', (SELECT TOP 1 '+CONVERT(varchar,@column)+' FROM '+CONVERT(varchar,@name)+' ORDER BY '+CONVERT(varchar,@column)+' DESC)';
EXEC(@sql)
объясните, пожалуйста, что случится при вот таком вызове процедуры?
exec addWeight '0,0 truncate table TWeight--', '', ''
27 июн 13, 17:17    [14493337]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Cygapb-007
Сергей Викт.
пропущено...

Что-то типа такого, наверное
CREATE PROCEDURE addWeight
	@weight INT,
	@name VARCHAR(40),
        @column VARCHAR(40)
AS
DECLARE @sql varchar(max)
SET @sql=N'
INSERT INTO TWeight(time, file_id)
SELECT '+CONVERT(varchar,@weight)+', (SELECT TOP 1 '+CONVERT(varchar,@column)+' FROM '+CONVERT(varchar,@name)+' ORDER BY '+CONVERT(varchar,@column)+' DESC)';
EXEC(@sql)
объясните, пожалуйста, что случится при вот таком вызове процедуры?
exec addWeight '0,0 truncate table TWeight--', '', ''

понятия не имею) я привёл пример. Вопросы к ТС)
27 июн 13, 17:18    [14493348]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Эээ... не совсем удачный пример, потому как первый параметр int...
Но суть вопроса понятна?
27 июн 13, 17:19    [14493360]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Сергей Викт.
Cygapb-007
пропущено...
объясните, пожалуйста, что случится при вот таком вызове процедуры?
exec addWeight '0,0 truncate table TWeight--', '', ''

понятия не имею) я привёл пример. Вопросы к ТС)


sql injection
иногда неплохо бы не просто приводить примеры.
27 июн 13, 17:20    [14493361]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Maxx
Member [скрыт]

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

не будет там ее,первый паметр интовый
27 июн 13, 17:22    [14493376]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Cygapb-007
Эээ... не совсем удачный пример, потому как первый параметр int...
Но суть вопроса понятна?

exec addWeight '0,0 truncate table TWeight--', '', ''


Не очень....
Server
Msg 8114, Level 16, State 5, Procedure addWeight, Line 0
Error converting data type varchar to int.
27 июн 13, 17:24    [14493389]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37067
Maxx
locky,

не будет там ее,первый паметр интовый

exec addWeight 0, '', ' 0); truncate table TWeight--'


Сообщение было отредактировано: 27 июн 13, 17:27
27 июн 13, 17:26    [14493400]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Сергей Викт.,

кста ,шлепнеться еще до того :))
SET @sql=N'
INSERT INTO TWeight(time, file_id) -- 2 поля
SELECT '+CONVERT(varchar,@weight)+', --1 значение
EXEC(@sql)
27 июн 13, 17:26    [14493408]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Сергей Викт.
Cygapb-007
Эээ... не совсем удачный пример, потому как первый параметр int...
Но суть вопроса понятна?

exec addWeight '0,0 truncate table TWeight--', '', ''


Не очень....
Server
Msg 8114, Level 16, State 5, Procedure addWeight, Line 0
Error converting data type varchar to int.

Оки, попытка number two
exec addWeight 0,'','0) truncate table TWeight--'


Сообщение было отредактировано: 27 июн 13, 17:28
27 июн 13, 17:27    [14493411]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
тьфу..
exec addWeight 0,'','0) truncate table TWeight--'
27 июн 13, 17:28    [14493418]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Гавриленко Сергей Алексеевич,

а так заработает )
27 июн 13, 17:29    [14493430]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Сергей Викт., сорри значения не досчитал... рабочая процедура
27 июн 13, 17:31    [14493450]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Maxx
Сергей Викт., сорри значения не досчитал... рабочая процедура

да я без претензий на суперпрофи) Базовый пример. Ни о какой защищенности говорить и не собирался) Налетели как коршуны ;)

exec addWeight 0,'','0) truncate table TWeight--'

и таки да, не спорю:)
27 июн 13, 17:33    [14493459]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Сергей Викт.,

да лано вам,вечер уже
27 июн 13, 17:35    [14493471]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Maxx
Сергей Викт.,

да лано вам,вечер уже

) всё ок) я только за дополнительный ликбез) Теперь сижу думаю, как это можно пофиксить.)))
Т.к. по итогу выполняется:

  INSERT INTO TWeight(time, file_id)  
  SELECT 0, (SELECT TOP 1 0) 
  delete TWeight
-- FROM  ORDER BY 0) delete TWeight-- DESC)

Вполне себе неплохо))
27 июн 13, 17:38    [14493496]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Сергей Викт., уже упоминалось в первом же ответе: тема "ТОП 10" вопрос номер 6
27 июн 13, 17:40    [14493509]     Ответить | Цитировать Сообщить модератору
 Re: сложная процедура  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Cygapb-007


[/src]
объясните, пожалуйста, что случится при вот таком вызове процедуры?
exec addWeight '0,0 truncate table TWeight--', '', ''
[/quot]
Где будет? У нормального архитектора будет permission denied ;-)
27 июн 13, 17:40    [14493510]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить