必须用参数声明标量变量

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]

【讨论】:

以上是关于必须用参数声明标量变量的主要内容,如果未能解决你的问题,请参考以下文章

必须声明标量变量错误 ADO.NET

System.Data.SqlClient.SqlException:'必须声明标量变量“@SSN”

vb.net SQL 导致 - “必须声明标量变量”

必须声明标量变量@Id?

使用 ODBC 连接到 SQL SERVER 时,s-s-rS 错误必须声明标量变量

表变量和错误“必须声明标量变量”