如何在一个存储过程调用中将多个记录插入表中

GLP

我有一个存储过程,可以接受诸如A,B,C等的字符串。我想分割字符串并将每个字母作为一条记录插入到表中。结果应为:

col1 col2
1    A
2    B
3    C

我可以使用游标,但是如果我从网页上调用此存储过程,游标有点慢。有没有更好的解决方案?

亚伦·伯特兰

而不是传递逗号分隔的字符串,而是传递一个表值参数。首先,在数据库中创建一个表类型:

CREATE TYPE dbo.Strings AS TABLE(String NVARCHAR(32));

然后您的存储过程:

CREATE PROCEDURE dbo.InsertStrings
  @Strings dbo.Strings READONLY
AS
BEGIN
  SET NOCOUNT ON;

  INSERT dbo.Table(Col2) -- assuming col1 is an IDENTITY column?
    SELECT String FROM @Strings;
END
GO

然后,在您的C#代码或任何其他代码中,您只需传递aDataTable作为Structured参数。这里的例子背景

如果您真的不想这样做,因为它太难了,那么您可以使用效率低得多的字符串拆分功能,例如

CREATE FUNCTION [dbo].[SplitString]
(
    @List NVARCHAR(MAX),
    @Delim VARCHAR(255)
)
RETURNS TABLE
AS
    RETURN ( SELECT [Value] FROM 
      ( 
        SELECT 
          [Value] = LTRIM(RTRIM(SUBSTRING(@List, [Number],
          CHARINDEX(@Delim, @List + @Delim, [Number]) - [Number])))
        FROM (SELECT Number = ROW_NUMBER() OVER (ORDER BY name)
          FROM sys.all_objects) AS x
          WHERE Number <= LEN(@List)
          AND SUBSTRING(@Delim + @List, [Number], LEN(@Delim)) = @Delim
      ) AS y
    );

然后,您的过程是:

CREATE PROCEDURE dbo.InsertStrings
  @Strings NVARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  INSERT dbo.Table(Col2) -- assuming col1 is an IDENTITY column?
    SELECT [Value] FROM dbo.SplitString(@Strings, ',');
END
GO

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在一个查询中插入多个记录?

来自分类Dev

如何在另一个表中将任何表的列名作为记录插入?

来自分类Dev

如何在更新 MySQL 中的第三个表时将多个记录从一个表插入另一个表

来自分类Dev

如何在存储过程中将两个MS SQL Server表合并为一个表

来自分类Dev

如何用另一个过程将数据插入到存储过程中的临时表中?

来自分类Dev

在DB2中将一个存储过程调用到另一个存储过程

来自分类Dev

如何在MySQL中将一个表中的行插入到另一个表中

来自分类Dev

如何在一个数据库中删除多个存储过程

来自分类Dev

如何在存储过程中的选择中将记录作为休息时间插入

来自分类Dev

如何在一个实例/一个脚本中的多个实例中创建存储过程?

来自分类Dev

React:如何在一个过程中调用多个状态改变函数?

来自分类Dev

如何在另一个过程中调用一个过程

来自分类Dev

如何在php中的多个总记录中显示一个表行中的两个记录?

来自分类Dev

如何在一个命令中将一个表中的自动递增 id 插入到另一个表中(使用返回)?

来自分类Dev

用户如何在一个表中拾取多个记录

来自分类Dev

创建一个存储过程以将新数据插入表中

来自分类Dev

将存储过程的结果插入表中并添加一个额外的列

来自分类Dev

将存储过程的结果插入表中并添加一个额外的列

来自分类Dev

插入需要从另一个表中引用字段的存储过程

来自分类Dev

如何从另一个存储过程调用一个存储过程

来自分类Dev

在存储过程中仅插入一个char

来自分类Dev

在单个查询中将多个行从一个表插入到Oracle中的另一个表

来自分类Dev

如何在 MySQL 中将每个表的插入或更新镜像到另一个表?

来自分类Dev

如何从存储过程中的3个表中获得一个结果

来自分类Dev

如何在一个表中插入一个6亿行的表

来自分类Dev

如何在PHP Script中插入已将前例键引用到另一个表的主键的记录?

来自分类Dev

如何在雪花中的另一个过程中调用过程

来自分类Dev

如何从同一个表的记录中更新、插入删除记录

来自分类Dev

表中的多个记录中的一个记录

Related 相关文章

  1. 1

    如何在一个查询中插入多个记录?

  2. 2

    如何在另一个表中将任何表的列名作为记录插入?

  3. 3

    如何在更新 MySQL 中的第三个表时将多个记录从一个表插入另一个表

  4. 4

    如何在存储过程中将两个MS SQL Server表合并为一个表

  5. 5

    如何用另一个过程将数据插入到存储过程中的临时表中?

  6. 6

    在DB2中将一个存储过程调用到另一个存储过程

  7. 7

    如何在MySQL中将一个表中的行插入到另一个表中

  8. 8

    如何在一个数据库中删除多个存储过程

  9. 9

    如何在存储过程中的选择中将记录作为休息时间插入

  10. 10

    如何在一个实例/一个脚本中的多个实例中创建存储过程?

  11. 11

    React:如何在一个过程中调用多个状态改变函数?

  12. 12

    如何在另一个过程中调用一个过程

  13. 13

    如何在php中的多个总记录中显示一个表行中的两个记录?

  14. 14

    如何在一个命令中将一个表中的自动递增 id 插入到另一个表中(使用返回)?

  15. 15

    用户如何在一个表中拾取多个记录

  16. 16

    创建一个存储过程以将新数据插入表中

  17. 17

    将存储过程的结果插入表中并添加一个额外的列

  18. 18

    将存储过程的结果插入表中并添加一个额外的列

  19. 19

    插入需要从另一个表中引用字段的存储过程

  20. 20

    如何从另一个存储过程调用一个存储过程

  21. 21

    在存储过程中仅插入一个char

  22. 22

    在单个查询中将多个行从一个表插入到Oracle中的另一个表

  23. 23

    如何在 MySQL 中将每个表的插入或更新镜像到另一个表?

  24. 24

    如何从存储过程中的3个表中获得一个结果

  25. 25

    如何在一个表中插入一个6亿行的表

  26. 26

    如何在PHP Script中插入已将前例键引用到另一个表的主键的记录?

  27. 27

    如何在雪花中的另一个过程中调用过程

  28. 28

    如何从同一个表的记录中更新、插入删除记录

  29. 29

    表中的多个记录中的一个记录

热门标签

归档