Что я спрашиваю ниже: Что такое фактический тип данных параметра @cleartext этой функции SQL?>> ENCRYPTBYKEY (..) - http://msdn.microsoft.com/en-us/library/ms174361.aspx
(Если вы читаете ниже этой строки, вы можете следить за историей и рассуждениями. Я думаю, что это сложнее, чем кажется на первый взгляд.)
Документация по SQL Server гласит, что параметр @ cleartext (2nd) EncryptByKey (..) функция может принимать различные типы:
EncryptByKey (@key_GUID, @ cleartext [, @add_authenticator, @authenticator])
@ cleartext Переменная типа nvarchar, char, varchar, binary, varbinary или nchar , содержащая данные, которые должны быть зашифрованы с помощью ключа.
^ ^ ^^ ^ ^ ^ ^ ^ ^ - - - - - Но каков фактически объявленный тип данных?...
Если бы я должен был создать пользовательскую функцию (полностью отделенную от приведенного выше примера EncryptByKey) какой фактический тип данных мне дать пользовательский параметр, чтобы он принимал все те жевводить таким же образом?
Редактировать 1: Я фактически обертываю функцию SQL EncryptByKey в пользовательскую функцию UDF, и я хочу воссоздать те же типы параметров, чтобы пройти черезк этому.Это причина того, что я хочу создать точно такие же параметры по типу.
Редактировать 2: Если я попытаюсь использовать sql_variant
, это приведет к ошибке
Сообщение 8116, уровень 16, состояние 1, процедура EncryptWrapper, строка 17 Тип данных аргумента sql_variant недопустим для аргумента 2 функции EncryptByKey.
Редактировать 3:
Вот моя пользовательская функция-обертка - и прямая проблема.Каким должен быть тип данных @cleartext для прямого доступа к EncryptByKey?
ALTER FUNCTION [dbo].[EncryptWrapper]
(
@key_GUID uniqueidentifier,
@cleartext -- ??????????? <<< WHAT TYPE ????????????????
@add_authenticator int = 0,
@authenticator sysname = NULL
)
RETURNS varbinary(8000)
AS
BEGIN
-- //Calling a SQL Server builtin function.
-- //Second param @cleartext is the problem. What data type should it be?
Return EncryptByKey(@key_GUID, @cleartext, @add_authenticator, @authenticator)
END
Примечание: мне не нужно было использовать CAST или CONVERT - мне нужно только использовать правильный тип данных для моего параметра @cleartext.
Редактировать 4 : Обнаружен параметр EncryptByKey (..) @cleartext , а не следующих типов :
sql_variant
- выдает ошибку при передаче varbinary
- слишком ограничительный - не разрешает передавать типы текста, принятые в противном случае EncryptByKey (..) sysname
, nvarchar
, varchar
- странное поведение, как правило, принимает только первый символтекст аргумента или что-то