SQL错误-必须声明标量变量
您好,我正在尝试创建一个使用游标接收值的过程,但遇到错误“必须声明标量变量“@labtests”。但我已经这样做了。 在创建过程之前,我已经创建了类型。 创建类型labTestCodeType作为表(TestCodeChar(4)) 因为我试图在一个查询中输入不同的测试代码SQL错误-必须声明标量变量,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,您好,我正在尝试创建一个使用游标接收值的过程,但遇到错误“必须声明标量变量“@labtests”。但我已经这样做了。 在创建过程之前,我已经创建了类型。 创建类型labTestCodeType作为表(TestCodeChar(4)) 因为我试图在一个查询中输入不同的测试代码 declare @test labTestCodeType insert into @test values('S023'), ('B001') exec usp_orderLab 'T0300001F', '12 Dec
declare @test labTestCodeType
insert into @test values('S023'), ('B001')
exec usp_orderLab 'T0300001F', '12 Dec 2018', null,@test
问题是:
FETCH Next from labTestCodeCursor INTO @labtests
@labtests
是一种表类型。无法获取表类型。您需要一个标量变量
将其更改为:
declare @testcode char(4)
FETCH Next from labTestCodeCursor INTO @testcode
这一部分:
INSERT INTO TestOrdered (patientID, testDate, testCode)
values (@patientID, @testDate, @testcode)
问题:当游标可以通过基于集合的查询完成时,为什么要使用游标
编辑:
非游标解决方案
BEGIN
INSERT INTO LabOrder (patientID, testDate, doctorID)
values (@patientID, @testDate, @doctorID)
INSERT INTO TestOrdered (patientID,testDate,testCode)
SELECT @patientID, @testDate, testcode
FROM @labtests
END
请参考我在上面y问题中的回答。谢谢你的回答帮助我解决了这个错误。
BEGIN
INSERT INTO LabOrder (patientID, testDate, doctorID)
values (@patientID, @testDate, @doctorID)
INSERT INTO TestOrdered (patientID,testDate,testCode)
SELECT @patientID, @testDate, testcode
FROM @labtests
END