【问题标题】:insert multi value with SP用 SP 插入多值
【发布时间】:2012-07-11 15:54:14
【问题描述】:

我有两张桌子。

1- 学生表 & 2- 成绩表

我想在学生表中插入值并在分数表中插入多个值,使用 SP 到 SQL Server 2008。

对于 EX:

ALTER proc [dbo].[InsertIntoScore]
(
@DateReg datetime,
@stdLastName nvarchar(50),
@stdFirstName nvarchar(50),
@Description nvarchar(500),

multi value as score table...
)
AS
DECLARE @Id AS INT
BEGIN TRY
BEGIN TRANSACTION
    INSERT INTO Student(DateReg,stdLastName,stdFirstName,[Description])
    VALUES (@DateReg,@stdLastName,@stdFirstName,@Description)
set @Id = SCOPE_IDENTITY() 

    insert multi value at Score table...    
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
    ROLLBACK
END CATCH

请帮帮我...

【问题讨论】:

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


    【解决方案1】:

    你应该使用Table-Valued Parameters

    为你要传入的表创建一个Sql类型

    CREATE TYPE dbo.ScoreType AS TABLE ( ScoreID int, StudentID int, etc.... ) 
    

    使用上述定义的类型将数据表从 C# 代码传递到存储过程

    ALTER proc [dbo].[InsertIntoScore] 
    ( @DateReg datetime, @stdLastName nvarchar(50), @stdFirstName nvarchar(50), 
    @Description nvarchar(500),  @tvpScore ScoreType) 
    AS 
       .....
       INSERT INTO dbo.Score (ScoreID, StudentID, ....)     
       SELECT dt.ScoreID, @id, .... FROM @tvpScore AS dt; 
    

    在c#中以这种方式传递数据表

    SqlCommand insertCommand = new SqlCommand("InsertIntoScore", sqlConnection); 
    SqlParameter p1 = insertCommand.Parameters.AddWithValue("@tvpScore", dtScore); 
    p1.SqlDbType = SqlDbType.Structured; 
    p1.TypeName = "dbo.ScoreType"; 
    .....
    insertCommand.ExecuteNonQuery(); 
    

    【讨论】:

    • 我无法在@tvpScore ScoreType 中使用 ScoreType。我应该在哪里写这段代码?创建类型 dbo.ScoreType...
    • 您在计划插入数据的 SqlServer 中创建它。使用 Sql Server 管理工作室。并记住定义您计划传递给存储过程的表的所有字段。
    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多