2012-07-11 90 views
0

我有两个表。用SP插入多值

1- student表& 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 

请帮我...

回答

0

您应该使用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(); 
+0

我不能在@tvpScore ScoreType中使用ScoreType。我应该在哪里写这段代码? CREATE TYPE dbo.ScoreType ... – 2012-07-11 17:23:10

+0

您可以在您计划插入数据的SqlServer中创建它。使用Sql Server Management Studio。并且记住定义您计划传递给存储过程的表的所有字段。 – Steve 2012-07-11 19:44:02