必须用参数声明标量变量
Posted
技术标签:
【中文标题】必须用参数声明标量变量【英文标题】:Must declare the scalar variable with parameter 【发布时间】:2017-05-01 00:26:53 【问题描述】:我想创建一个过程来更新一个表,但我收到了这个错误:
(68,1):SQL72014:.Net SqlClient 数据提供者: 消息 137,级别 16,状态 1,程序 updatePatient,第 11 行 必须声明标量变量“@pPatient”。
这是我正在尝试创建的程序:
CREATE PROCEDURE [dbo].[updatePatient]
@pPatient PatientTableType readonly
AS
BEGIN
UPDATE Patient
SET Patient.Cel = @pPatient.Cel,
Patient.Address = @pPatient.Address,
Patient.NamePatient = @pPatient.NamePatient,
Patient.Phone = @pPatient.Phone
WHERE Patient.idPatient = @pPatient.idPatient
END
这是我创建的类型:
CREATE TYPE [dbo].[PatientTableType] AS TABLE
(
[idPatient] SMALLINT NOT NULL,
[NamePatient] VARCHAR(250) NOT NULL,
[Cellular] INT NULL,
[Phone] INT NULL,
[Address] VARCHAR(250) NULL
);
这是我要更新的表格:
CREATE TABLE [dbo].[Patient]
(
[idPatient] SMALLINT NOT NULL,
[NamePatient] VARCHAR(250) NOT NULL,
[Cel] INT NULL,
[Phone] INT NULL,
[Address] VARCHAR(250) NULL,
PRIMARY KEY CLUSTERED ([idPatient] ASC)
);
我做错了什么?我该如何解决?
提前致谢!
【问题讨论】:
那真的是你的程序代码吗?错误消息表明问题出在第 11 行,但您没有那么多行。 对不起,因为我已经格式化,第 11 行 = 其中 Paciente.idPaciente = @pPaciente.idPaciente 您不能使用点访问表类型变量的值。您需要在患者表和表类型变量之间使用连接。看看***.com/questions/224732/… 感谢您的评论@ChetanRanpariya 它确实有帮助,但我解决了将 [@Patient] 放在方括号之间的问题并且它有效。如果这不是一个好方法,请说出来...... 请注意,您可以发布自己问题的答案。 48 小时后,您可以接受您的回答。这不会给您任何分数,但它会向阅读此页面的人展示您找到的解决方案,这可能会帮助他们解决可能遇到的任何问题。您的答案仍然可以被投票。 48 小时的等待是为了让其他人有机会发布一个可能更好的答案。接受答案还会从 *** 的未回答问题列表中删除您的问题。请阅读***.com/help/accepted-answer了解更多信息。 【参考方案1】:希望这可行
CREATE PROCEDURE [dbo].[updatePatient]
(
@pPatient PatientTableType READONLY
)
AS
BEGIN
IF EXISTS(SELECT 1 FROM @pPatient)
Begin
UPDATE Patient
SET Patient.Cel = p.Cellular,
Patient.Address = p.Address,
Patient.NamePatient = p.NamePatient,
Patient.Phone = p.Phone
FROM @pPatient p
WHERE Patient.idPatient = p.idPatient
END
END
使用示例数据执行
DECLARE @PatientTableType AS PatientTableType
INSERT INTO @PatientTableType
SELECT 1,'ABC',985565,4242,'Hankong'
EXECUTE [updatePatient] @PatientTableType
SELECT * FROM [Patient]
【讨论】:
以上是关于必须用参数声明标量变量的主要内容,如果未能解决你的问题,请参考以下文章
System.Data.SqlClient.SqlException:'必须声明标量变量“@SSN”