Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический SQL в UDF (MS SQL Server 2012) / 9 сообщений из 9, страница 1 из 1
04.01.2020, 15:20
    #39910746
MsGuns
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
Вот функция:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
USE [TelBook]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[UsF_Test] 
(
  @FieldName sysname,  -- Имя поля, по которому делать фильтрацию (where)
  @FieldValue varchar(max),  -- Значение для фильтрации
  @FieldSort sysname,  -- Имя поля для сортировки (order by)
  @Nlist int,          -- Номер листа, который требуется вернуть
  @QRows int           -- Кол-во строк на листе 
)
RETURNS 
 @RetTable TABLE
 (
 	FIO_ID int, 
	FIO_FAM varchar(255),
	FIO_Name [varchar](255),
	FIO_SName [varchar](255),
	FIO_RoomNo [varchar](8),
	FIO_PersAdrs [varchar](1024) NULL,
	FIO_Pos [int] NULL,
	FIO_OUT [varchar](4) NULL,
	FIO_DateOUT [date] NULL,
	FIO_DEP [int] NULL,
	FIO_MI [int] NULL,
	FIO_Mo [int] NULL,
	FIO_OP [int] NULL,
	FIO_RG [int] NULL,
	FIO_UPR [int] NULL,
	FIO_SUB [int] NULL,
	FIO_Res1 [varchar](1024) NULL,
	FIO_Res2 [varchar](16) NULL,
	FIO_Res3 [varchar](16) NULL,
	FIO_Res4 [varchar](16) NULL
 )

AS
BEGIN
   declare  @SSQL varchar(max)
   set @SSQL = 'Insert into' +'@RetTable (FIO_FAM,FIO_Name)' +' Select * from FIO '
   +' Where '+@FieldName+ ' = '''+@FieldValue+''' order by '+@FieldSort
   +' offset '+ cast((@Nlist-1)*@QRows as varchar(10))+'rows fetch next '+cast(@Qrows as varchar(10))+' rows only '
   Exec (@SSQL)
   RETURN 
END



При попытке записать UDF на сервер выдает

Сообщение 443, уровень 16, состояние 14, процедура UsF_Test, строка 41
Недопустимое использование оператора "EXECUTE STRING", оказывающего побочное действие, в функции.

Что делать ?

Спасибо за помощь
...
Рейтинг: 0 / 0
04.01.2020, 15:24
    #39910747
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
Делать динамический sql не в udf.
...
Рейтинг: 0 / 0
04.01.2020, 15:31
    #39910748
MsGuns
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
Гавриленко Сергей Алексеевич
Делать динамический sql не в udf.


А в UDF никак ?
...
Рейтинг: 0 / 0
04.01.2020, 16:02
    #39910752
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
MsGuns,

Никак. Об этом даже в документации написано.
...
Рейтинг: 0 / 0
04.01.2020, 17:13
    #39910767
MsGuns
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
Гавриленко Сергей Алексеевич
MsGuns,

Никак. Об этом даже в документации написано.


Спасибо.
...
Рейтинг: 0 / 0
04.01.2020, 18:12
    #39910778
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
MsGuns,

Exec/SP в функции не вставляется, (за искл. специальных), ну или CLR тогда
,а наоборот почти без проблем (вызов функций в SP)
...
Рейтинг: 0 / 0
07.01.2020, 20:28
    #39911435
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
MsGuns,

такие вещи недопустимо использовать в принципе при разработке для бизнеса.
...
Рейтинг: 0 / 0
10.01.2020, 01:57
    #39912254
MsGuns
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
Владислав Колосов
MsGuns,

такие вещи недопустимо использовать в принципе при разработке для бизнеса.


А почему собственно ? Этот динамический запрос выполняется сугубо на сервере, доступа к хранимке со стороны клиента отсутствует в принципе ибо трехзвенка (ASP.NET MVC). Что тут противоречит принципам "разработок для бизнеса" ?
...
Рейтинг: 0 / 0
10.01.2020, 02:38
    #39912257
stenford
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL в UDF (MS SQL Server 2012)
MsGuns

А почему собственно ? Этот динамический запрос выполняется сугубо на сервере, доступа к хранимке со стороны клиента отсутствует в принципе ибо трехзвенка (ASP.NET MVC). Что тут противоречит принципам "разработок для бизнеса" ?

потому-что динамический sql, где поля и данные подставляются произвольно - это самоубийство безопасности, тут не только данные можно выгрести какие угодно, но еще саму базу дропнуть
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический SQL в UDF (MS SQL Server 2012) / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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