无法识别存储过程参数中的正斜杠

时间:2012-09-20 19:53:43

标签: sql-server stored-procedures

我正在进行此存储过程调用:

exec sp_executesql N'EXEC MyStoredProcedure 
     @MyId = @0, @MyVarField = @1', 
     N'@0 int, @1 nvarchar(4000)',
     @0=2, @1='lll/kkk'

存储过程只是一个简单的选择,正在寻找MyVarField = 'lll/kkk',但参数中的/似乎打破了它......无论如何都找不到db行。

如果我传入'ffflll',则会找到包含lllkkk的行,但在其中有/时却找不到它。那是什么意思?

ALTER PROCEDURE [dbo].[MyStoredProcedure]
@MyId int,
@MyVarField  varchar
AS
BEGIN
SET NOCOUNT ON;

SELECT * FROM MyTable WHERE VarField = @VarField
END 

我需要对存储过程做些什么才能让它接受/ {作为varchar的一部分?

2 个答案:

答案 0 :(得分:2)

尝试使参数匹配与语句相同的类型(可能是基础列),并给它一个长度:

ALTER PROCEDURE [dbo].[MyStoredProcedure]
    @MyId int,
    @MyVarField NVARCHAR(4000)
AS
...

我认为目前的失败与斜线无关。试试这个:

CREATE PROCEDURE dbo.foo
  @bar VARCHAR
AS
  PRINT @bar;
GO

EXEC dbo.foo '12345';

有些背景,请阅读:

答案 1 :(得分:-2)

正斜杠(“/”)是RUN命令的快捷方式(如mysql或sqlserver中的“go”)。

http://power2build.wordpress.com/2011/12/09/forward-slash-in-sqlplus/