如何将字符串 (varchar) 传递到 SQL 存储过程中



我正在尝试将字符串传递到存储过程中。我的代码是:

CREATE PROCEDURE AddCondition
    @CondName varchar(50),
    @CondDesc varchar(50)
AS
    DECLARE @CondID int
    --This code gets the next ID for the table
    SET @CondID = (SELECT MAX([Condition ID]) FROM [dbo].[Tube Conditions]) + 1
    SET @CondID = ISNULL(@CondID,1)
    --This code adds records to the table
    INSERT INTO [dbo].[Tube Conditions] ([Condition ID],[Condition Name],[Description])
    VALUES (@CondID, @CondName, @CondDesc)
GO

我尝试执行:

DECLARE @aName varchar(50), @aDesc varchar(50)
SET @aName = 'Lathed'
SET @aDesc = 'The tube has been lathed to size'
EXECUTE AddCondition @aName, @aDesc
GO

但是我不断收到错误:

Msg 245,级别 16,状态 1,过程添加条件,第 51
行 将 varchar 值"Lathed"转换为数据类型 int 时转换失败。

在处理 int 和浮点值时,同样的过程也有效,所以我不确定我在这里错过了什么。我正在使用SQL Server 2014 Management Studio和SQL Server Express。

提前感谢!

从您发布的代码中,只有一件事会生成您指定的错误,那就是如果表 [dbo].[Tube Conditions] 中的[Condition Name]列是 int 类型,而不是 insert 语句所期望的 varchar。

顺便说一句:这是在表中生成下一个 ID 的一种非常危险的方式 - 当同时插入 2 条记录时,它会尖叫并发问题。SQL将为您生成此标识,请查找。

同意 Jamiec 的观点,你可能有 [dbo]。管条件]类型为int

单个语句是事务

INSERT INTO [dbo].[Tube Conditions] ([Condition ID],[Condition Name],[Description])
SELECT MAX(isnull([Condition ID],0)) + 1, 'Lathed', 'The tube has been lathed to size'
FROM [dbo].[Tube Conditions]

最新更新