繁体   English   中英

如何将一个具有公共ID(主键)的用户的多行插入SQL Server数据库?

[英]How to insert multiple rows of one user with common ID (primary key) into SQL Server database?

我想以我的Asp.net表格获取教育资格记录。 因为我要记录10年级,12年级,毕业,硕士的记录。 因此,我为此创建了四行...和5列(考试年份,考试,考试分数,总成绩,除法)。

现在,我想通过一次单击来插入数据库中的所有行,方法是保持所有四个记录中一个用户的通用主键。

请帮我提供代码(C#)

您可能想看看使用复合主键 这是一个主键,它使用多列组成一个键。 有支持和反对这种策略的论点。 请参阅: 使用多列主键的优缺点是什么?

例如,如果您的表如下所示:

CREATE TABLE [dbo].[StudentExam]
(
    [StudentId] INT NOT NULL PRIMARY KEY, 
    [Year] INT NOT NULL, 
    [Board] SOMEDATATYPE NOT NULL, 
    [Percentage] FLOAT NOT NULL, 
    [TotalMark] INT NOT NULL, 
    [Division] SOMEDATATYPE NOT NULL, 
)

您可以更改架构,使其看起来像这样:

CREATE TABLE [dbo].[StudentExam]
(
    [StudentId] INT NOT NULL, 
    [Year] INT NOT NULL, 
    [Board] SOMEDATATYPE NOT NULL, 
    [Percentage] FLOAT NOT NULL, 
    [TotalMark] INT NOT NULL, 
    [Division] SOMEDATATYPE NOT NULL, 
    CONSTRAINT [PK_StudentExam] PRIMARY KEY ([StudentId], [Year])
)

这样,您就声明此表中的任何给定行均由“学生”和“年份”共同唯一标识。 您仍然可以仅查询学生,也可以查询年份,但是只有它们一起才能确定一行。

有关主键的更多信息,请参见创建主键。

在Sql中创建表类型

 CREATE TYPE [dbo].[TypeName] AS TABLE(
[name1] [varchar](1000) NULL,
[name2] [varchar](1000) NULL,
[name3] [varchar](max) NULL
)
GO

在SQL中创建过程:

 ALTER PROCEDURE [dbo].[InsertData]
 @TableType TypeName readonly
 AS 

   INSERT INTO [dbo].[Table_Master]
   (Tname1,Tname2,Tname3)
    select name1,name2,name3 from @TableType

然后转到隐藏代码

        OpenConnection();
        sqlcmd.CommandType = CommandType.StoredProcedure;
        sqlcmd.CommandText = spName;
        sqlcmd.Connection = sqlconn;

        SqlParameter tvpParam = sqlcmd.Parameters.AddWithValue("@Type", Your 
        Datatable); 
        tvpParam.SqlDbType = SqlDbType.Structured; 
        SqlParameter returnParameter = sqlcmd.Parameters.Add("RetVal", 
         SqlDbType.Int);
        returnParameter.Direction = ParameterDirection.ReturnValue;
        sqlcmd.ExecuteNonQuery();

        int Result = (int)returnParameter.Value;

        sqlcmd.Dispose();
        return Result;

通过Uper Code传递您的DT ...它将完全起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM