1

Trying to create a stored procedure like this:

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

Where List is type valued table which is already created in the database with 3 columns StudentList, RollNumber and Id.

When I try to create this procedure in SQL Server 2008, I am getting following error:

Must declare the scalar variable @List

4

1 回答 1

3

您在T-SQL中工作- 而不是在 C# 中!需要将@List参数视为 T-SQL 表变量 - 而不是 C# 对象......

所以你需要使用 T-SQL 风格的语句——比如SELECT来自表值参数@List——而不是 C# 风格的“点符号”(比如访问 .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

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

阅读这篇出色的文章以了解有关该主题的更多详细信息:再使用 VARCHAR(n) 有什么意义?

于 2013-08-30T15:12:26.137 回答