使用存储过程将数组插入sql的表

Ele*_*ena 4 c# t-sql sql-server asp.net

我有这样一张桌子:

keyword (table name)        
----------------    
kid   key   
----------------    
1     asp.net   
2     php   
3     C#?   
4     vb
Run Code Online (Sandbox Code Playgroud)

在webform页面中,我有一个文本框,用户可以插入如下字符串:

asp.net,php,C#?,vb,css
Run Code Online (Sandbox Code Playgroud)

我必须在另一个表中插入此字符串,如下所示:

p-tag (table name)
----------------
pid  kid
----------------
1    1
1    2
1    3
1    4
Run Code Online (Sandbox Code Playgroud)


我必须首先检查字符串中的那些单词是否存在于关键字中.如果是,请将它们插入到p-tag表中.我可以使用C#代码执行此操作,但我想使用存储过程.
可能吗?
注意:我的英语很弱,抱歉.

Mak*_*kov 5

我建议将关键字作为表值参数传递.请参阅此文章以了解有关它的更多信息 - 表值参数.关于如何使用它还有一个很好的C#示例.然后通过单个查询完成所需的操作相当容易.首先为table-value参数创建一个类型:

    CREATE TYPE dbo.TableTypeName AS TABLE
        ( keyName nvarchar(50) )
Run Code Online (Sandbox Code Playgroud)

然后在以下过程中使用它:

CREATE PROCEDURE sp_UpdateTags 
    (@tableParameter dbo.TableTypeName READONLY, @tagId INT)
AS
INSERT [p-tag](pid, kid)
SELECT @tagId, K.kid from @tableParameter tP
inner join [keyword] K on key = tP.keyName
Run Code Online (Sandbox Code Playgroud)

这将仅插入关键字表中存在的值.

希望能帮助到你!