Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / сложная процедура / 25 сообщений из 36, страница 1 из 2
27.06.2013, 16:07
    #38312896
Nawy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Вот такая псевдопроцедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
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.
...
Рейтинг: 0 / 0
27.06.2013, 16:13
    #38312909
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Nawy, тема "ТОП 10" вопрос номер 6
...
Рейтинг: 0 / 0
27.06.2013, 16:15
    #38312913
Сергей Викт.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
NawyВот такая псевдопроцедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
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.
Что-то типа такого, наверное
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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)
...
Рейтинг: 0 / 0
27.06.2013, 17:02
    #38313046
Владимир Затуливетер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт.
Код: sql
1.
CONVERT(varchar,@column) CONVERT(varchar,@name)


тут можно не конвертить varchar в varchar :)
...
Рейтинг: 0 / 0
27.06.2013, 17:06
    #38313053
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Владимир ЗатуливетерСергей Викт.
Код: sql
1.
CONVERT(varchar,@column) CONVERT(varchar,@name)



тут можно не конвертить varchar в varchar :)VARCHAR(40) преобразуется в VARCHAR(30), однако!
Кто его знает! Может, так и надо?
...
Рейтинг: 0 / 0
27.06.2013, 17:12
    #38313064
Сергей Викт.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
iapВладимир Затуливетерпропущено...

тут можно не конвертить varchar в varchar :)VARCHAR(40) преобразуется в VARCHAR(30), однако!
Кто его знает! Может, так и надо?
я перестраховался просто:) Мало ли)
...
Рейтинг: 0 / 0
27.06.2013, 17:13
    #38313071
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт.iapпропущено...
VARCHAR(40) преобразуется в VARCHAR(30), однако!
Кто его знает! Может, так и надо?
я перестраховался просто:) Мало ли)Тогда надо было использовать для названий объектов БД тип sysname.
Который базируется на NVARCHAR(128)
...
Рейтинг: 0 / 0
27.06.2013, 17:15
    #38313077
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
EXEC()-то всё равно @SQL преобразует в NVARCHAR(MAX)
Так что лучше сразу использовать юникод
и перед литеральными строками ставить букву N
...
Рейтинг: 0 / 0
27.06.2013, 17:17
    #38313082
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт.NawyВот такая псевдопроцедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
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.
Что-то типа такого, наверное
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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)

объясните, пожалуйста, что случится при вот таком вызове процедуры?
Код: sql
1.
exec addWeight '0,0 truncate table TWeight--', '', ''
...
Рейтинг: 0 / 0
27.06.2013, 17:18
    #38313087
Сергей Викт.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Cygapb-007Сергей Викт.пропущено...

Что-то типа такого, наверное
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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)

объясните, пожалуйста, что случится при вот таком вызове процедуры?
Код: sql
1.
exec addWeight '0,0 truncate table TWeight--', '', ''


понятия не имею) я привёл пример. Вопросы к ТС)
...
Рейтинг: 0 / 0
27.06.2013, 17:19
    #38313089
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Эээ... не совсем удачный пример, потому как первый параметр int...
Но суть вопроса понятна?
...
Рейтинг: 0 / 0
27.06.2013, 17:20
    #38313090
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт.Cygapb-007пропущено...
объясните, пожалуйста, что случится при вот таком вызове процедуры?
Код: sql
1.
exec addWeight '0,0 truncate table TWeight--', '', ''


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

sql injection
иногда неплохо бы не просто приводить примеры.
...
Рейтинг: 0 / 0
27.06.2013, 17:22
    #38313094
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
locky,

не будет там ее,первый паметр интовый
...
Рейтинг: 0 / 0
27.06.2013, 17:24
    #38313098
Сергей Викт.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Cygapb-007Эээ... не совсем удачный пример, потому как первый параметр int...
Но суть вопроса понятна?
Код: sql
1.
exec addWeight '0,0 truncate table TWeight--', '', ''



Не очень....
ServerMsg 8114, Level 16, State 5, Procedure addWeight, Line 0
Error converting data type varchar to int.
...
Рейтинг: 0 / 0
27.06.2013, 17:26
    #38313102
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Maxxlocky,

не будет там ее,первый паметр интовый
Код: sql
1.
exec addWeight 0, '', ' 0); truncate table TWeight--'
...
Рейтинг: 0 / 0
27.06.2013, 17:26
    #38313104
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт.,

кста ,шлепнеться еще до того :))
Код: sql
1.
2.
3.
4.
SET @sql=N'
INSERT INTO TWeight(time, file_id) -- 2 поля
SELECT '+CONVERT(varchar,@weight)+', --1 значение
EXEC(@sql)
...
Рейтинг: 0 / 0
27.06.2013, 17:27
    #38313105
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт.Cygapb-007Эээ... не совсем удачный пример, потому как первый параметр int...
Но суть вопроса понятна?
Код: sql
1.
exec addWeight '0,0 truncate table TWeight--', '', ''



Не очень....
ServerMsg 8114, Level 16, State 5, Procedure addWeight, Line 0
Error converting data type varchar to int.
Оки, попытка number two
Код: sql
1.
exec addWeight 0,'','0) truncate table TWeight--'
...
Рейтинг: 0 / 0
27.06.2013, 17:28
    #38313108
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
тьфу..
Код: sql
1.
exec addWeight 0,'','0) truncate table TWeight--'
...
Рейтинг: 0 / 0
27.06.2013, 17:29
    #38313110
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Гавриленко Сергей Алексеевич,

а так заработает )
...
Рейтинг: 0 / 0
27.06.2013, 17:31
    #38313113
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт., сорри значения не досчитал... рабочая процедура
...
Рейтинг: 0 / 0
27.06.2013, 17:33
    #38313115
Сергей Викт.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
MaxxСергей Викт., сорри значения не досчитал... рабочая процедура
да я без претензий на суперпрофи) Базовый пример. Ни о какой защищенности говорить и не собирался) Налетели как коршуны ;)

Код: sql
1.
exec addWeight 0,'','0) truncate table TWeight--'


и таки да, не спорю:)
...
Рейтинг: 0 / 0
27.06.2013, 17:35
    #38313118
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт.,

да лано вам,вечер уже
...
Рейтинг: 0 / 0
27.06.2013, 17:38
    #38313123
Сергей Викт.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
MaxxСергей Викт.,

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

Код: sql
1.
2.
3.
4.
  INSERT INTO TWeight(time, file_id)  
  SELECT 0, (SELECT TOP 1 0) 
  delete TWeight
-- FROM  ORDER BY 0) delete TWeight-- DESC)


Вполне себе неплохо))
...
Рейтинг: 0 / 0
27.06.2013, 17:40
    #38313129
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Сергей Викт., уже упоминалось в первом же ответе: тема "ТОП 10" вопрос номер 6
...
Рейтинг: 0 / 0
27.06.2013, 17:40
    #38313130
Cammomile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложная процедура
Cygapb-007

[/src]объясните, пожалуйста, что случится при вот таком вызове процедуры?
Код: sql
1.
exec addWeight '0,0 truncate table TWeight--', '', ''

[/quot]
Где будет? У нормального архитектора будет permission denied ;-)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / сложная процедура / 25 сообщений из 36, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]