我需要将一些行插入到使用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'并在添加到表之前加密。有没有办法实现这个目标?
答案 0 :(得分:1)
使用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
- 语句,以便在更改表格数据之前检查结果...