尝试使用类型表创建存储过程时出错

时间:2013-08-30 14:52:59

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

尝试创建这样的存储过程:

CREATE PROCEDURE Students   
    @List StudentList READONLY,    
    @AdmissionId VARCHAR(max) 
AS
BEGIN   
    INSERT INTO RcordsTable (StudentId, RollNumber, AdmissionId)
    VALUES(@List.StudentId, @List.RollNumber, @AdmissionId)
END

List是类型值表,其中已在数据库中创建了3列StudentListRollNumberId

当我尝试在SQL Server 2008中创建此过程时,我收到以下错误:

  

必须声明标量变量@List

1 个答案:

答案 0 :(得分:3)

您正在使用 T-SQL - 而不是在C#中! @List参数需要被视为T-SQL表变量 - 而不是像C#对象....

所以你需要使用T-SQL样式语句 - 比如表值参数SELECT中的@List - 而不是C#style“dot-notation”(就像访问.NET的字段时一样)对象):

CREATE PROCEDURE Students   
    @List StudentList READONLY,    
    @AdmissionId VARCHAR(max) 
AS
BEGIN   
    INSERT INTO RcordsTable (StudentId, RollNumber, AdmissionId)
        SELECT
            StudentId, RollNumber, @AdmissionId
        FROM @List
END

旁注:为什么将AdmissionId定义为Varchar(max)类型? Id对我来说听起来很数字 - >使用适当的数字类型。如果它不是数字 - 那么你应该为VARCHAR定义并使用合理长度 - 不要只是过于懒惰并且使用VARCHAR(MAX)来做所有事情 - 它不是好主意!

阅读这篇优秀文章,了解有关该主题的更多详情:What's the Point of Using VARCHAR(n) Anymore?