1

我有兩個表包含以下信息:如何基於另一列的內容將列添加到SQL Server表中?

產品

Name | ID | 

名稱包含一個短字符串表示的名稱,以及該行的語言。

語言

Language | ID | 

語言將包含上述名稱列在同一子。

我想要做的是在名爲LanguageID的產品表中添加一列。

然後,我會從名稱列中提取指示語言的子字符串,並對語言表中的語言列進行不區分大小寫的比較。在找到匹配項的情況下,我希望將語言表中的ID值插入到新創建的LanguageID列中,以創建外鍵關係。

所以,例如在我的產品表,我有:

Name     | ID 
Product 1 - enGlIsh | 1 

在我的語言表,我有:

Language | ID 
English  | 77 

所以我想用我的產品就結了什麼表是:

Name     | ID | LanguageID 
Product 1 - enGlIsh | 1 | 77 

我已經寫了regEx從我的子字符串返回語言,我不知道我如何然而,在SQL服務器中使用它並構造這個查詢。我怎樣才能做到這一點 ?

這裏是正則表達式:

Regex regEx = new Regex(@"(.+\s*-\s*.+\s*-\s*.+)\s*-\s*(\w{1,3}\s*-\s*\w{1,3})\s*-\s*.+"); 
       string language = regEx.Match( NAME ).Groups[2].Value.ToString(); 

回答

1

不需要正則表達式;

create table Languages(id int identity(1,1), language varchar(32)) 

獲取的語言列表(假設格式爲<anything><space><language_name>):

insert Languages 
    select distinct 
     right(name,charindex(' ', reverse(name), 1)-1) as [language] 
    from products 

然後你就可以回去和使用相同的表達,以獲得語言名稱根據需要更換/升級。

0

你真的不需要正則表達式只是使用上命令的字符串,然後看是否poroduct名稱包含的語言。像這樣的東西

insert my_product_lang_table 
select p.name, p.id, l.id 
from product p, language l 
where charindex(upper(l.name),upper(p.name)) != null 
相關問題