Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL错误-必须声明标量变量_Sql_Sql Server_Stored Procedures - Fatal编程技术网

SQL错误-必须声明标量变量

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

您好,我正在尝试创建一个使用游标接收值的过程,但遇到错误“必须声明标量变量“@labtests”。但我已经这样做了。 在创建过程之前,我已经创建了类型。 创建类型labTestCodeType作为表(TestCodeChar(4))

因为我试图在一个查询中输入不同的测试代码

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