从单元格中选择特定信息,包括其他信息 SQL Server 2008 R2



我正在尝试从变量中选择特定信息,我将在下面解释这种情况。

模块向数据库中的日志记录过程提供数据,并将其插入到表中,例如:

IF(@EventID = 20)
BEGIN
    INSERT INTO _LogPvps 
    VALUES (@CharID, @Desc)
END

@Desc中是一个带有 3x 变体的文本字符串,我需要提取并添加到另一个表中,字符串示例:(变体 1,2,3)

[My: **variant1**, Neutral, no freebattle team] [His(**variant2**): **variant3**, Neutral, no freebattle team]

我可以像这样通过 1 个变体进行拆分,但如果可能的话,我需要能够区分所有 3 个变体。

IF @Desc LIKE '%My: Hunter, Neutral, no freebattle team%%His%%, Neutral, no freebattle team%%'
 BEGIN
     DECLARE @CNAME VARCHAR (64)
     DECLARE @JOB VARCHAR (16)
     SET @CNAME = (SELECT CHARNAME16 FROM DB_TEST.._Char WHERE CHARID = @CHARID) 
     SET @JOB = 'Hunter'
     INSERT INTO JOBKILLS 
     VALUES (@CHARID, @CNAME, @JOB, CURRENT_TIMESTAMP, @Desc)
 END
 IF @Desc LIKE '%My: Robber, Neutral, no freebattle team%%His%%, Neutral, no freebattle team%%'
 BEGIN
     DECLARE @CNAME VARCHAR (64)
     DECLARE @JOB VARCHAR (16)
     SET @CNAME = (SELECT CHARNAME16 FROM DB_TEST.._Char WHERE CHARID = @CHARID) 
     SET @JOB = 'Thief'
     INSERT INTO JOBKILLS 
     VALUES (@CHARID, @CNAME, @JOB, CURRENT_TIMESTAMP, @Desc)
 END
 IF @Desc LIKE '%My: Trader, Neutral, no freebattle team%%His%%, Neutral, no freebattle team%%'
 BEGIN
     DECLARE @CNAME VARCHAR (64)
     DECLARE @JOB VARCHAR (16)
     SET @CNAME = (SELECT CHARNAME16 FROM DB_TEST.._Char WHERE CHARID = @CHARID) 
     SET @JOB = 'Trader'
     INSERT INTO JOBKILLS 
     VALUES (@CHARID, @CNAME, @JOB, CURRENT_TIMESTAMP, @Desc)
 END

那么如何选择每个变体,以便我无法将它们设置为标量变量并将它们插入到单独表中的各个列中呢?

例:

INSERT INTO JOBKILLS 
VALUES (@CHARID, @CNAME, @JOB,
        @variant1, @variant2, @variant3,
        CURRENT_TIMESTAMP, @Desc)

另一种解释方式,A - B - C 根据游戏中用户的行为而变化,我需要从@Desc字符串中挑选所有 3 个并将它们放入另一个表中的单独列中。

[My: **A**, Neutral, no freebattle team] [His(**B**): **C**, Neutral, no freebattle team]
在我看来,将此

字符串拆分为多个部分然后将它们添加到表中是一个问题。这个问题已经在SO上解决了几次。但是,如果问题与此不同,请添加一些更多详细信息,说明为什么您的问题是唯一的。下面是拆分字符串并返回表的代码。不用说,您可能需要修改它以满足您的特定需求。

CREATE FUNCTION [dbo].[splitstring] ( @stringToSplit VARCHAR(MAX), @delim VARCHAR(MAX))
RETURNS
    @returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
    DECLARE @name NVARCHAR(255)
    DECLARE @pos INT
    declare @len int = len(@delim)
    declare @nextchar int = 1
    declare @startofstring int = 1
    WHILE CHARINDEX(@delim, @stringToSplit) > 0
    BEGIN
        SELECT @pos  = CHARINDEX(@delim, @stringToSplit)  
        SELECT @name = SUBSTRING(@stringToSplit, @startofstring, @pos-@nextchar)
        INSERT INTO @returnList 
        SELECT @name
        SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+@nextchar+@len, LEN(@stringToSplit)-@pos)
    END
    INSERT INTO @returnList
    SELECT @stringToSplit
    RETURN
END
GO

最新更新