Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将字符串列表作为输入并插入缺少的行然后返回它们的存储过程_Sql_Sql Server 2008_Stored Procedures - Fatal编程技术网

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

Sql 将字符串列表作为输入并插入缺少的行然后返回它们的存储过程,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我有一个表名称 Id Name +----+---------------+ 1 John 2 Kate 3 Mark 我想创建一个执行以下操作的存储过程: 1)将名称列表作为字符串作为输入参数 我对此做了一些研究,但没有找到最好的方法。我将在C#应用程序中从实体框架调用存储过程。我在考虑用逗号分隔的字符串传递名称,并在过程中拆分它们。但我不知道这是怎么做到的 2)对于列表中的

我有一个表
名称

  Id         Name     
+----+---------------+
  1          John      
  2          Kate    
  3          Mark 
我想创建一个执行以下操作的存储过程:

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

我对此做了一些研究,但没有找到最好的方法。我将在C#应用程序中从实体框架调用存储过程。我在考虑用逗号分隔的字符串传递名称,并在过程中拆分它们。但我不知道这是怎么做到的

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

如果存在开关盒,我如何执行该操作?如果不存在,我如何插入该开关盒

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

在添加所有缺少的名称之后,我想选择输入列表中的所有名称及其id

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

我正在寻找如何做每一步的提示,以及它们是否可以结合起来


谢谢

保持数据库端精简,将逻辑放在应用程序端,特别是当您有脾气暴躁的DBA时

改为使用合并/向上插入


查看此项。

如果将逗号分隔的列表作为参数传递到存储过程中,则需要了解如何使用
charindex
left
substring
right

拆分每个名称时,您需要将它们添加到临时表或表值变量中

您将使用
insert
语句上的
exists()
子查询来决定是否将新名称插入
names

最后,您可以使用select语句将temp table/table valued变量
连接回
Names
表,以取出所有键(包括新键),并将它们传递回前端