2

我构建了一个这样的存储过程:

create proc sp_test
  (@name nvarchar(100))
as
begin
    select * from company
    where company.companyname like '%'+@name+'%'
end
go

现在我想测试我的存储过程。因为公司名称可能有一个单引号,例如:Bob's Warehouse,所以我使用这个名称作为参数在 DEV、SIT、UAT 等不同环境中运行我的存储过程。我用 2 个单引号替换单引号。我发现我可以在 DEV 中获得结果,但不能在 UAT 中获得结果。我不知道为什么。

exec sp_test 'Bob''s Warehouse'

这与不同环境中的数据库设置有关吗?为什么完全相同的代码可以在一种环境中运行,而在另一种环境中却不行?

提前致谢。

4

1 回答 1

0

如果仅仅是因为单引号,那么在一个环境而不是另一个环境上工作是没有意义的。尝试在不同的环境中备份和恢复相同的数据并尝试一下,这可能是因为脏数据。如果您有像 [Bob's Warehouse] 这样的特定记录在不同的环境中不起作用,请尝试检查您看到的单引号是否真的是 char(39)。您也可以尝试在不同的环境中运行 [exec sp_test 'Bob' + char(39) + 's Warehouse' ] 看看它是否有效。

于 2013-03-08T19:42:02.343 回答