В моей таблице sql server я хочу добавить вычисляемый столбец, который является хешем других столбцов в той же таблице.Ниже приведена структура моей таблицы.
Адрес:
AddressID (int, PK)
AddressLine1 (nvarchar)
AddressLine2 (nvarchar)
Город (nvarchar)
State (nvarchar)
AddressHash (вычисляемый столбец)
Ниже приведено то, что я хочу получить в моем вычисляемом столбце:
MASTER.SYS.FN_VARBINTOHEXSUBSTRING(0, HASHBYTES('SHA1',COALESCE(AddressLine1, N'') + COALESCE(AddressLine2, N'') + COALESCE(City, N'') + COALESCE(State, N'')), 1, 0)
Если щелкнуть правой кнопкой мыши таблицу иперейти к дизайну и ввести выше для «Формула» в разделе «Спецификация вычисляемого столбца», я получаю следующую ошибку:
- Невозможно изменить таблицу.
Пользовательская функцияимя не может быть префиксом с именем базы данных в этом контексте.
Поэтому я подумал, что буду использовать пользовательскую функцию для вычисления хэша и сопоставления этого udf с формулой.
Ниже приведен код, который я использую для создания UDF:
CREATE FUNCTION udfHashAddress
(
@pAddressLine1 nvarchar(50), @pAddressLine2 nvarchar(50), @pCity nvarchar(50), @pState nvarchar(50))
)
RETURNS nvarchar(max) -- not sure what the correct size would be
WITH SCHEMABINDING
AS
BEGIN
DECLARE @result nvarchar(max)
SELECT @result = MASTER.SYS.FN_VARBINTOHEXSUBSTRING(0, HASHBYTES('SHA1',COALESCE(@pAddressLine1, N'') + COALESCE(@pAddressLine2, N'') + COALESCE(@pCity, N'') + COALESCE(@pState, N'')), 1, 0)
RETURN @result
END
GO
Но я получаю следующую ошибку с приведенным выше кодом:
* Невозможнофункция привязки схемы 'udfHashAddress', потому что имя 'MASTER.SYS.FN_VARBINTOHEXSUBSTRING' недопустимо для схемы binding.Имена должны быть в формате, состоящем из двух частей, и объект не может ссылаться на себя. *
Когда я удалил префикс db "MASTER", я получил эту ошибку:
* Невозможнофункция привязки схемы 'udfHashAddress', поскольку она ссылается на системный объект 'SYS.FN_VARBINTOHEXSUBSTRING'. *
Я что-то здесь упустил?Был бы признателен за любую помощь / указатели.