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 
相关问题