【发布时间】:2015-09-11 11:52:30
【问题描述】:
这是我遇到的情况:
A) C# 代码:执行存储过程“Check_Data”
- 我想声明,我的 C# 代码没有任何问题,因为它尽可能基本,而且我和我的同事也仔细检查了它。
B) SQL Server:
所有数据库都是 MSSQL2005。请不要建议升级它们,因为这是我的客户使用的。
请注意,以下所有 4 个 DB 以及存储过程“Check_Data”都是以完全相同的方式创建的。唯一的区别是每个 DB 的排序规则。
我使用用户“sa”连接到所有数据库,以确保权限没有问题。
-
实例 A: 排序规则“SQL_Latin1_General_CP1_CI_AS”
- DB 1: 排序规则“SQL_Latin1_General_CP1_CI_AS” => C# 代码运行成功。
- DB 2: 归类“Vietnamese_CI_AS” => C# 代码有错误“找不到存储过程”。
-
实例 B: 归类“Vietnamese_CI_AS”
- DB 1: 排序规则“SQL_Latin1_General_CP1_CI_AS” => C# 代码运行成功。
- DB 2: 归类“Vietnamese_CI_AS”
=> C# 代码有错误“找不到存储过程”。
所以基本上,我的数据库只是讨厌排序规则“Vietnamese_CI_AS” 并拒绝获取这个存储过程。
这是“Check_Data”的脚本:
CREATE PROCEDURE [dbo].[Check_Data]
(
@Acc nvarchar(50),
@Status varchar(500) OUTPUT)
AS
BEGIN
if exists (select 1 from tblRequest where Acc=@Acc)
SET @Status = '1'--have data
else
SET @Status = '0'--have not data
END
谁能告诉我这有什么问题?
更新
当我使用上面的脚本创建新的过程将不同的名称(Check_Acc),代码成功调用这个新过程。
因此,我暂时将采用此解决方案并重命名所有有此问题的 proc。
但是,如果我知道是什么导致代码无法调用原始 proc,我将不胜感激。
【问题讨论】:
-
我希望看到不同的错误消息...当您在存储过程之外运行 SQL 时会发生什么?更改数据库上的排序规则只会更改新对象和新调用的默认值。我怀疑您可能需要删除并重新创建 proc,或者在 where 子句中指定排序规则
-
我已经尝试删除并重新创建它,但仍然出现错误。但是,如果我用相同的脚本创建一个新的,只需更改 proc 的名称,就可以了。现在我真的很困惑。
标签: c# sql sql-server stored-procedures sql-server-2005