存储过程中的XML节点加密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程中的XML节点加密相关的知识,希望对你有一定的参考价值。
我需要将一些行插入到使用XML插入值的表中。我面临的问题是该表包含一个字段'password',它在表定义中是varbinary,从前端传递的值应该加密在插入之前使用数据库中的函数
@encryptUsername=dbo.Encrypt(CONVERT(VARCHAR(MAX),@userName))
当使用XML插入值时,我不知道如何执行此操作。
以下是从XML插入值的示例sp
INSERT INTO CLIENT(username,password)
SELECT
Col.valueCol.value('(userName/text())[1]','VARCHAR'),
Col.value('(password/text())[1]','VARCHAR')
FROM @XmlData.nodes('/usernames/username') Tab(Col)
这里我需要获取xml节点值'password'并在添加到表之前加密。有没有办法实现这个目标?
答案
使用没有长度的varchar
或nvarchar
是危险的(Bad habits to kick: Varchar without a length (Aaron Bertrand))。
由于.value()
方法返回一个类型值,这是一个varchar(max)
,你可以直接传递给你的函数。试试这个:
INSERT INTO CLIENT(username,password)
SELECT
dbo.Encrypt(Col.value('(userName/text())[1]','VARCHAR(MAX)')),
dbo.Encrypt(Col.value('(password/text())[1]','VARCHAR(MAX)'))
FROM @XmlData.nodes('/usernames/username') Tab(Col)
注意我从你的代码中取了上面的内容,你使用Col.valueCol.value()
以及Col.value()
。我接受了我认为正确的那个。
注意2您应该将INSERT
语句更改为SELECT
语句,以便在更改表数据之前检查结果...
以上是关于存储过程中的XML节点加密的主要内容,如果未能解决你的问题,请参考以下文章