Я создал масштабирующее UDF (называемое sCurrentAppUser()) в SQL Server 2012 Express, и я бы хотел использовать этот UDF в качестве значения по умолчанию при определении таблицы. Но каждый раз, когда я пытаюсь, я получаю сообщение об ошибке «sCurrentAppUser» не является признанным встроенным именем функции ».Использовать UDF как значение по умолчанию в столбце таблицы в SQL Server
Поскольку я не могу опубликовать более двух ссылок (репутация), я буду ссылаться на мои исследования и ссылки в комментарии.
Вот мой UDF:
ALTER FUNCTION [dbo].[sCurrentAppUser]()
RETURNS nVarChar(128)
AS BEGIN
DECLARE @CurrentAppUser nVarChar(128)
IF EXISTS (SELECT 1 FROM ActiveConnections WHERE ComputerName = host_name()) BEGIN
SELECT @CurrentAppUser = CONVERT (nVarChar(128), LoginUser)
FROM ActiveConnections
WHERE ComputerName = host_name()
END ELSE BEGIN
SELECT @CurrentAppUser = Convert (nVarChar(128), suser_sname())
WHERE NOT EXISTS (
SELECT 1
FROM ActiveConnections
WHERE ComputerName = host_name()
)
END
RETURN @CurrentAppUser
END
И моя попытка создать таблицу с ограничением по умолчанию на первой колонке:
CREATE TABLE [dbo].[Clients](
[ModifyingUser] [nvarchar](128) NOT NULL DEFAULT sCurrentAppUser(),
[Modification] [char](1) NULL DEFAULT 'A',
[ModifyingHost] [nvarchar](128) NOT NULL DEFAULT host_name(),
[ClientID] [uniqueidentifier] NOT NULL,
[Label] [nvarchar](1024) NULL,
CONSTRAINT [PK_Clients] PRIMARY KEY (
[ClientID] ASC
)
)
[Эта страница] (http://www.techrepublic.com/blog/the-enterprise-cloud/understand-when-to-use-user-defined-functions-in-s ql-server /), в частности, говорит: «Вы можете использовать скалярно-значные UDF как значение по умолчанию для столбца в таблице». [Документация MSDN] (https://technet.microsoft.com/en-us/library/ms191320 (v = sql.110) .aspx) ничего не говорит о невозможности сделать это. – Jason
[Эта тема форума] (http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=165697) дает пример синтаксиса, рассматривая его как вычисляемый столбец вместо ограничения по умолчанию, но это не работает для я тоже. И [этот вопрос в StackExchange] (http://stackoverflow.com/questions/1744455/using-udf-for-default-value-of-a-column) говорит об использовании параметризованного UDF в качестве ограничения по умолчанию, но «Ответ» говорит о том, что вообще не используется UDF. – Jason