2016-02-28 19 views
0

我想從一個變量中選擇特定的信息我將解釋下面的場景。從單元中選擇特定的信息,包括其他信息SQL Server 2008 R2

模塊數據提供給我的數據庫日誌記錄程序,並會插入到表,例如:

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

@Desc是,我需要提取並添加到3倍的變體的文本字符串另一個表,字符串例子:(變體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] 
+0

對不起,無法理解'variant'部分。你能用更簡單的方式描述它嗎? –

+0

A - B - C根據用戶遊戲名稱的不同而變化,我需要從@Desc字符串中挑選它們中的所有3個,並將它們放入另一個表中的單獨列中。 [我的:** A **,中立,沒有freebattle團隊] [他(** B **):** C **,中立,沒有freebattle團隊] – sqlcoding2097

+0

嗨,在我看來,這似乎是一個問題將這個字符串分成幾個部分,然後將它們添加到一個表中。這個問題已經在SO上解決了幾次。但是,如果問題與此不同,請添加一些關於爲什麼您的問題是唯一的更多詳細信息。這裏是分割一個字符串並返回一個表的代碼。 – cameront

回答

0

在我看來,像分裂的問題,這個字符串轉換成部分,然後將它們添加到表中。這個問題已經在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, @[email protected]) 

     INSERT INTO @returnList 
     SELECT @name 

     SELECT @stringToSplit = SUBSTRING(@stringToSplit, @[email protected][email protected], LEN(@stringToSplit)[email protected]) 
    END 
    INSERT INTO @returnList 
    SELECT @stringToSplit 

    RETURN 
END 

GO