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

Sql server 无法识别存储过程参数中的正斜杠,sql-server,stored-procedures,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的

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

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
的一部分?

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


尝试使您的参数与语句(可能是基础列)的类型匹配,并为其指定长度:

ALTER PROCEDURE [dbo].[MyStoredProcedure]
    @MyId int,
    @MyVarField NVARCHAR(4000)
AS
...
我认为目前的失败与斜杠无关。试试这个:

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

EXEC dbo.foo '12345';
有关背景资料,请阅读:


sqlplus不是oracle的东西吗?尝试使用双斜杠//不,它不是<代码>/对sqlcmd或sp_executesql没有任何特殊意义。它唯一的含义是由T-SQL语法赋予它的任何内容,这对于它在字符串中不被替换是非常好的。是的,你说得对,is不包括mssql。似乎是甲骨文的问题。你能显示你的存储过程代码吗?你为什么还要执行EXEC?为什么不干脆
exec MyStoredProcedure@MyId=2,@MyVarField='lll/kkk'
?啊,代码是由PetaPoco生成的-我刚刚复制了它的运行状态,这是nvarchar上的长度,谢谢…非常奇怪,它没有/,嘿,呵呵