我正在尝试将字符串传递到存储过程中。我的代码是:
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]