存储过程中的XML节点加密

问题描述 投票:1回答:1

我需要将一些行插入到使用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'并在添加到表之前加密。有没有办法实现这个目标?

sql-server xml stored-procedures sql-server-2012
1个回答
1
投票

使用没有长度的varcharnvarchar是危险的(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语句,以便在更改表数据之前检查结果...

© www.soinside.com 2019 - 2024. All rights reserved.