【发布时间】:2011-01-18 00:22:21
【问题描述】:
下面我要问的是:这个 SQL 函数的@cleartext 参数的实际数据类型是什么? >> 加密密钥 (..) - http://msdn.microsoft.com/en-us/library/ms174361.aspx
(如果您在此行下方阅读,您可以了解历史和推理。我认为它比最初看起来更棘手。)
SQL Server 文档声明EncryptByKey(..) 函数的@cleartext (2nd) 参数可以接受多种类型:
EncryptByKey (@key_GUID , @cleartext [, @add_authenticator, @authenticator] )
@cleartext
是类型变量 nvarchar、char、varchar、二进制、 包含数据的 varbinary 或 nchar 即用密钥加密。
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ - - - - - 但它实际声明的数据类型是什么? ...
如果我要创建一个自定义函数(与上面给出的 EncryptByKey 示例完全分开)我应该给自定义参数提供什么实际数据类型,以便它以相同的方式接受所有这些相同的类型?
编辑 1: 我实际上将 SQL EncryptByKey 函数包装在自定义 UDF 函数,我想重新创建相同的函数 要传递的参数类型 它。这就是我想按类型创建完全相同的参数的原因。
编辑 2:如果我尝试使用 sql_variant 会导致错误
消息 8116,级别 16,状态 1,程序 EncryptWrapper,第 17 行参数数据 类型 sql_variant 对 EncryptByKey 函数的参数 2。
编辑 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- 奇怪的行为- 往往只采用参数文本的第一个字符或其他内容
【问题讨论】:
标签: tsql types parameters