将params传递给存储过程 - 特例

时间:2013-12-26 09:50:01

标签: sql sql-server-2008 stored-procedures

ALTER  PROCEDURE [dbo].[usp_SaveUserCustomerXRef]
    @Username varchar(48),
    @LinkID varchar(48)
AS
DELETE FROM UserCustomerX WHERE UserName=@UserName AND LinkID=@LID
INSERT INTO UserCustomerX(Username, LID)
VALUES (@Username, @LID)

执行As -

  1. EXEC usp_SaveUserCustomerXRef'10026:ttmm19',2H0; //语法错误
  2. EXEC usp_SaveUserCustomerXRef'10026:ttmm19',A1; //已执行+已插入
  3. EXEC usp_SaveUserCustomerXRef'10026:ttmm19',2; //已执行+已插入
  4. EXEC usp_SaveUserCustomerXRef'10026:ttmm19','2H0'; //已执行+已插入

    表UserCustomerX中的列的类型为Varchar.My问题与案例号:2为什么它插入值虽然没有单引号。但是案例编号:1给出了语法错误。案例3和4是正常条件。案例2为何有效?没有引号?

1 个答案:

答案 0 :(得分:1)

您的第二个参数@LinkID是一个varchar,因此您在执行存储过程时最好强制推广使用引号。

正如Nicarus所说,它可能是一个隐含的数字转换,会引发语法错误。