Sql server 在存储过程中添加一个浮点默认值,但它表示它期望参数

Sql server 在存储过程中添加一个浮点默认值,但它表示它期望参数,sql-server,stored-procedures,insert,Sql Server,Stored Procedures,Insert,我试图输入一个房间的元组,这里是我的插入代码 create proc spInsertToRoom @room_name varchar(50), @room_status varchar(50)='Available', @room_rate float AS BEGIN INSERT INTO tblRoom(room_name,room_status,room_rate) SELECT @room_name,@room_status,@room_rate END 我希望状态自动可用。然后

我试图输入一个房间的元组,这里是我的插入代码

create proc spInsertToRoom
@room_name varchar(50),
@room_status varchar(50)='Available',
@room_rate float
AS
BEGIN
INSERT INTO tblRoom(room_name,room_status,room_rate)
SELECT @room_name,@room_status,@room_rate
END
我希望状态自动可用。然后当我输入一个值时 它一直在说

exec [spInsertToRoom]'A102',3500
程序或函数“spinsertoom”需要参数“@room\u rate”, 没有提供

但是当我尝试这个的时候

执行[Spinsertoom]'A103',@room\u rate=4000

成功了


我只是想知道为什么需要输入
@room\u rate=4000
,而我在youtube上看到的是一个人只需输入一个变量,就像我以前的代码一样?

在这种情况下,您需要在调用中命名参数。对于您的代码,它会隐式地将3500转换为varchar(50),然后找不到房间费率的值

exec [spInsertToRoom] @room_name = 'A102', @room_rate = 3500
我想提出几点建议。首先,当您希望数字精确时,不要使用float。Float是一种近似的数据类型。像数字(9,2)这样的东西是更好的选择


我的第二个建议是去掉你名字的前缀。在寻找过程名称时,它只是噪音,不太可能与其他东西混淆。如果这是我的系统,那么这个过程的名称将是Room_Insert。这样,PROC将根据处理的对象进行排序,动词位于末尾。文件室更新、文件室删除等按字母顺序排序(如在SSMS中)时,都将位于程序列表中其他文件的旁边。

谢谢!也感谢你的推荐!:)