尝试创建这样的存储过程:
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列StudentList
,RollNumber
和Id
。
当我尝试在SQL Server 2008中创建此过程时,我收到以下错误:
必须声明标量变量@List
答案 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?