1

我正在调用这个存储过程:

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

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

如果我传入,'ffflll'那么它会找到包含 的行lllkkk,只是在其中有 a 时找不到/它。那是怎么回事?

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

SELECT * FROM MyTable WHERE VarField = @VarField
END 

我需要对存储过程做什么才能使其接受 / 作为 a 的一部分varchar

4

2 回答 2

3

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

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

我认为目前的失败与斜线没有任何关系。尝试这个:

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

EXEC dbo.foo '12345';

有关一些背景,请阅读:

于 2012-09-20T20:15:24.283 回答
-2

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

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

于 2012-09-20T19:56:23.897 回答