如果部分密钥承租人与签名密钥上的承租人不匹配,如何将状态更新为错误匹配字符?
How to update status to wrong match characters where portion key charterer not match charterer on signature key?
我在 SQL 服务器 2012 上工作我遇到问题我无法使用不匹配字符更新状态,其中部分密钥不等于基于组 ID 的签名密钥字符。
Group Id 表示为:
$$C$$$**$ (1=,2= ,3=C,4=,5=,6=**,7=)
Signature Key Group Id Portion Key status Signature Key(group Id 3) Reason
*$*$C$***$**$**$* 3 s wrong C s <> C
如上一行所示,状态匹配字符错误,因为签名密钥上的组 ID 3 将是
C 和部分键是 s 字符,所以我将使用错误的匹配字符更新状态,因为 s 不等于 c
数据样本:
Create table #Ref
(
SignatureKey nvarchar(50),
GroupId int,
PortionKey nvarchar(50),
Status nvarchar(100)
)
insert into #Ref(SignatureKey,GroupId,PortionKey,status)
values
('*$*$C$***$**$**$*',3,'s',NUll),
('*$*$*$FG$*$**$*',4,'F',NUll),
('*$*$*$***$*$D$*',6,'D',NUll),
('*$*$*$***$***$**$*',2,'g',NUll),
('*$**$*$***$L$**$*',5,'f',NUll)
预期结果:
Signature Key Group Id Portion Key Status
*$*$C$***$**$**$* 3 s wrong Match chatterers
*$*$*$FG$*$**$* 4 F wrong Match chatterers
*$*$*$***$*$D$* 6 D wrong Match chatterers
*$*$*$***$***$**$* 2 g wrong Match chatterers
*$**$*$***$L$**$* 5 f wrong Match chatterers
更多解释见下图:
我制作了这个函数,但不知道如何调用它:
Create FUNCTION [dbo].[fn_split_string]
(
@string nvarchar(max),
@delimiter nvarchar(max)
)
RETURNS TABLE AS RETURN
(
SELECT
--ROW_NUMBER ( ) over(order by (select 0)) AS id -- intuitive, but not correect
Split.a.value('let $n := . return count(../*[. << $n]) + 1', 'int') AS id
, Split.a.value('.', 'NVARCHAR(MAX)') AS value
FROM
(
SELECT CAST('<X>'+REPLACE(@string, @delimiter, '</X><X>')+'</X>' AS XML) AS String
) AS a
CROSS APPLY String.nodes('/X') AS Split(a)
)
根据我的示例如何调用
select * from [dbo].[fn_split_string]('*$*$C$***$**$**$*','$') pc
网上借用了一个字符串拆分函数(Link:https://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648)
分割字符串的功能returns一table。例如,如果我 运行
SELECT * FROM dbo.Split('*$**$*$***$L$**$*','$')
返回结果为:
一旦你有了拆分字符串的功能,你就可以使用 CROSS APPLY 来 运行 它对你的 table.
中的所有行
declare @Ref table
(
SignatureKey nvarchar(50),
GroupId int,
PortionKey nvarchar(50),
Status nvarchar(100)
)
insert into @Ref(SignatureKey,GroupId,PortionKey,status)
values
('*$*$C$***$**$**$*',3,'s',NUll),
('*$*$*$FG$*$**$*',4,'F',NUll),
('*$*$*$***$*$D$*',6,'D',NUll),
('*$*$*$***$***$**$*',2,'g',NUll),
('*$**$*$***$L$**$*',5,'f',NUll)
select r.*, f.*
,case
when r.PortionKey = f.Data then 'match' else 'not match'
end
from @Ref r
cross apply
dbo.Split(r.SignatureKey,'$') f where r.GroupId = f.Id
结果集为:
希望这对您有所帮助。
我在 SQL 服务器 2012 上工作我遇到问题我无法使用不匹配字符更新状态,其中部分密钥不等于基于组 ID 的签名密钥字符。
Group Id 表示为: $$C$$$**$ (1=,2= ,3=C,4=,5=,6=**,7=)
Signature Key Group Id Portion Key status Signature Key(group Id 3) Reason
*$*$C$***$**$**$* 3 s wrong C s <> C
如上一行所示,状态匹配字符错误,因为签名密钥上的组 ID 3 将是 C 和部分键是 s 字符,所以我将使用错误的匹配字符更新状态,因为 s 不等于 c
数据样本:
Create table #Ref
(
SignatureKey nvarchar(50),
GroupId int,
PortionKey nvarchar(50),
Status nvarchar(100)
)
insert into #Ref(SignatureKey,GroupId,PortionKey,status)
values
('*$*$C$***$**$**$*',3,'s',NUll),
('*$*$*$FG$*$**$*',4,'F',NUll),
('*$*$*$***$*$D$*',6,'D',NUll),
('*$*$*$***$***$**$*',2,'g',NUll),
('*$**$*$***$L$**$*',5,'f',NUll)
预期结果:
Signature Key Group Id Portion Key Status
*$*$C$***$**$**$* 3 s wrong Match chatterers
*$*$*$FG$*$**$* 4 F wrong Match chatterers
*$*$*$***$*$D$* 6 D wrong Match chatterers
*$*$*$***$***$**$* 2 g wrong Match chatterers
*$**$*$***$L$**$* 5 f wrong Match chatterers
更多解释见下图:
我制作了这个函数,但不知道如何调用它:
Create FUNCTION [dbo].[fn_split_string]
(
@string nvarchar(max),
@delimiter nvarchar(max)
)
RETURNS TABLE AS RETURN
(
SELECT
--ROW_NUMBER ( ) over(order by (select 0)) AS id -- intuitive, but not correect
Split.a.value('let $n := . return count(../*[. << $n]) + 1', 'int') AS id
, Split.a.value('.', 'NVARCHAR(MAX)') AS value
FROM
(
SELECT CAST('<X>'+REPLACE(@string, @delimiter, '</X><X>')+'</X>' AS XML) AS String
) AS a
CROSS APPLY String.nodes('/X') AS Split(a)
)
根据我的示例如何调用
select * from [dbo].[fn_split_string]('*$*$C$***$**$**$*','$') pc
网上借用了一个字符串拆分函数(Link:https://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648)
分割字符串的功能returns一table。例如,如果我 运行
SELECT * FROM dbo.Split('*$**$*$***$L$**$*','$')
返回结果为:
一旦你有了拆分字符串的功能,你就可以使用 CROSS APPLY 来 运行 它对你的 table.
中的所有行declare @Ref table
(
SignatureKey nvarchar(50),
GroupId int,
PortionKey nvarchar(50),
Status nvarchar(100)
)
insert into @Ref(SignatureKey,GroupId,PortionKey,status)
values
('*$*$C$***$**$**$*',3,'s',NUll),
('*$*$*$FG$*$**$*',4,'F',NUll),
('*$*$*$***$*$D$*',6,'D',NUll),
('*$*$*$***$***$**$*',2,'g',NUll),
('*$**$*$***$L$**$*',5,'f',NUll)
select r.*, f.*
,case
when r.PortionKey = f.Data then 'match' else 'not match'
end
from @Ref r
cross apply
dbo.Split(r.SignatureKey,'$') f where r.GroupId = f.Id
结果集为:
希望这对您有所帮助。