Я могу создать Функцию С одним разовым Использованием в Сценарии или Хранимой процедуре?

Объявление функции с последующим вызовом родительского конструктора решило эту проблему для меня.

class myClass extends WP_Widget {
  function __construct(){
     parent::__construct(...) // calls constructor from WP_Widget class
  }
}
98
задан Benjamin 22 June 2018 в 23:17
поделиться

4 ответа

Вы можете вызвать CREATE Function в начале вашего скрипта и DROP Function ближе к концу.

63
ответ дан 24 November 2019 в 05:15
поделиться

В сценарии SQL можно создавать временные хранимые процедуры, например:

create procedure #mytemp as
begin
   select getdate() into #mytemptable;
end

, но не функции. Вы могли бы сохранить в proc, что это приведет к временной таблице, а затем использовать эту информацию позже в скрипте ..

81
ответ дан 24 November 2019 в 05:15
поделиться

В сценариях у вас больше возможностей и больше возможностей для рациональной декомпозиции. Изучите режим SQLCMD (меню запроса -> режим SQLCMD), в частности, команды: setvar и: r.

Внутри хранимой процедуры ваши возможности очень ограничены. Вы не можете создать определение функции непосредственно в теле процедуры. Лучшее, что вы можете сделать, это сделать что-то вроде этого с помощью динамического SQL:

create proc DoStuff
as begin

  declare @sql nvarchar(max)

  /*
  define function here, within a string
  note the underscore prefix, a good convention for user-defined temporary objects
  */
  set @sql = '
    create function dbo._object_name_twopart (@object_id int)
    returns nvarchar(517) as
    begin
      return 
        quotename(object_schema_name(@object_id))+N''.''+
        quotename(object_name(@object_id))
    end
  '

  /*
  create the function by executing the string, with a conditional object drop upfront
  */
  if object_id('dbo._object_name_twopart') is not null drop function _object_name_twopart
  exec (@sql)

  /*
  use the function in a query
  */
  select object_id, dbo._object_name_twopart(object_id) 
  from sys.objects
  where type = 'U'

  /*
  clean up
  */
  drop function _object_name_twopart

end
go

Это приближает глобальную временную функцию, если такая вещь существует. Он по-прежнему виден другим пользователям. Вы можете добавить @@ SPID вашего соединения, чтобы сделать имя уникальным, но тогда в остальной части процедуры также потребуется использовать динамический SQL.

3
ответ дан 24 November 2019 в 05:15
поделиться

Общие табличные выражения позволяют вам определять, какие по сути представления являются последними только в рамках ваших операторов select, insert, update и delete. В зависимости от того, что вам нужно сделать, они могут быть ужасно полезными.

24
ответ дан 24 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: