将字符串列表作为输入并插入缺失行的存储过程然后返回它们

时间:2013-11-16 16:40:19

标签: sql sql-server-2008 stored-procedures

我有一张表Names

  Id         Name     
+----+---------------+
  1          John      
  2          Kate    
  3          Mark 

我想创建一个执行以下操作的存储过程:

1)将名称列表作为字符串作为输入参数

我已经对此做了一些研究,但找不到最好的方法。我将在C#应用程序中调用实体框架中的存储过程。我想在一个用逗号分隔的字符串中传递名称,并在程序中将它们分开。但无法弄清楚这是如何完成的。

2)对于列表中的每个名称,如果Name列中不存在该名称,请为其插入新行。

如果切换案例存在,如何进行切换,如果不是

则插入

3)选择输入列表中的*行。

添加所有缺少的名称后,我想选择输入列表中所有名称为

的名称

这可以在一个存储过程中完成,还是必须将它们分成多个。

我正在寻找有关如何执行每个步骤的提示,以及它们是否可以合并。

由于

2 个答案:

答案 0 :(得分:0)

保持你的数据库侧面精益,并在应用程序方面留下逻辑,特别是如果你有脾气暴躁的DBA。

改为使用MERGE / Upsert。

查看此SO post

答案 1 :(得分:0)

如果将逗号分隔列表作为参数传递给存储过程,则需要了解如何使用charindexleftsubstring和{{1} }

在拆分每个名称时 - 您可以将它们添加到临时表或表值变量中。

您是否使用right语句insert子查询Names exists()表中的insert新名称的决定。

然后,您最终可以将一个select语句设置为join您的临时表/表值变量返回到您的Names表,以取出所有键(包括新键)并传递他们回到你的前端。