powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
7 сообщений из 7, страница 1 из 1
Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
    #39870661
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Создаём табличный тип:

Код: sql
1.
2.
3.
4.
5.
CREATE TYPE [Test_Keys] AS TABLE
(
  [Key]	INT PRIMARY KEY
);
GO



Пример функции:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE FUNCTION [dbo].[SMS_GetTemplates](
  @TemplateKeys	Test_Keys READONLY,
  @AllowAll		BIT = 1
) RETURNS TABLE
AS RETURN (
  SELECT
	[Templates].[Key],
	[Templates].[SubsystemKey],
	[Subsystem].[ID],
	[Subsystem].[FieldsJSONArr],
	[Templates].[Name],
	[Templates].[Text],
	[Templates].[SystemPattern]
  FROM
	[Templates] JOIN [Subsystem] ON
	[Templates].[SubsystemKey] = [Subsystem].[Key] 
  WHERE
      ([Templates].[Key] IN (SELECT [Key] FROM @TemplateKeys)) OR
      ((NOT EXISTS(SELECT [Key] FROM @TemplateKeys)) AND (@AllowAll = 1))
)
GO



Вызываю функцию примерно так:
Код: sql
1.
SELECT * FROM [dbo].[SMS_GetTemplates](DEFAUTL, 1) WHERE [SubsystemID] = @SubsystemID



Получаю ошибку:
Код: sql
1.
Недопустимое значение по умолчанию параметра 1.




У меня вопрос, можно ли задать переменной табличного типа значение по умолчанию "пустая таблица"?

У табличных функций такой фокус проходит: SELECT * FROM [dbo].[SMS_GetTemplates](DEFAUTL, 1). У табличных функций инлайн пишет ошибку...
...
Рейтинг: 0 / 0
Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
    #39870663
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEFAUTL != DEFAULT
...
Рейтинг: 0 / 0
Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
    #39870748
Konst_One,

чего тут сказать, остроумна! ))

пускай будет так))
Код: sql
1.
SELECT * FROM [dbo].[SMS_GetTemplates](DEFAULT, 1) WHERE [SubsystemID] = @SubsystemID



но вопрос и без этого понятен
...
Рейтинг: 0 / 0
Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
    #39870804
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

Вы еще только в начале пути батхёрта с табличными типами... Лучше сразу откажитесь, пока не наступило привыкание к гвоздям в постели.
...
Рейтинг: 0 / 0
Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
    #39870823
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

простите пожалуйста, не могли бы Вы описать,
1. зачем Вам пользовательские типы?
2. зачем Вам табличные пользовательские типы?
3. если они Вам нужны для TVP, то в какой ситуации понадобится передавать туда DEFAULT?

очень уж интересно...
...
Рейтинг: 0 / 0
Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
    #39870845
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerros1. зачем Вам пользовательские типы?
2. зачем Вам табличные пользовательские типы?
3. если они Вам нужны для TVP, то в какой ситуации понадобится передавать туда DEFAULT?

так по примеру же всё видно
автор хочет в некоторых случая передавать в функцию набор данных для фильтрации, а иногда хочет не передавать
и вот во втором случае помог бы default, без него придется объявлять пустую табличную переменную просто потому что by design

табличные параметры передаются по ссылке
а это значит, что default ещё долго не видать, как и output, как и даже табличных параметров без readonly
...
Рейтинг: 0 / 0
Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
    #39870935
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShakillGerros1. зачем Вам пользовательские типы?
2. зачем Вам табличные пользовательские типы?
3. если они Вам нужны для TVP, то в какой ситуации понадобится передавать туда DEFAULT?

так по примеру же всё видно
автор хочет в некоторых случая передавать в функцию набор данных для фильтрации, а иногда хочет не передавать
и вот во втором случае помог бы default, без него придется объявлять пустую табличную переменную просто потому что by design

табличные параметры передаются по ссылке
а это значит, что default ещё долго не видать, как и output, как и даже табличных параметров без readonly

В том то и дело, что приходится объявлять переменную постоянно... лишняя строчка кода(( Но самое интересное, DEFAULT работает в табличных функциях, которые не "ин-лайн" и ошибка появилась внезапно и неожиданно)) когда табличную функцию переписали на табличную функцию инлайн

Что касается TVP - используется на клиенте написанном на дельфи, а там FireDAC. Но с появлением в mssql 2016 работы с json, думается мне что придётся перепахивать и искоренять TVP т.к. принципиальной нужды их использования можно избежать
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как задать переменной табличного типа значение по умолчанию в функции "ин-лайн"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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