没有模式名称的SQL Server'找不到存储过程'

问题描述 投票:1回答:7

SQL Server 2005/2008,db = user = schema = owner ='John',ASP.net 2.0.50727,vb,IIS7

我正在将网站从一台服务器移动到另一台服务器。这段代码在带有SQL Server 2005的旧服务器上运行良好。

    Dim sqlCmdVehicle As SqlCommand = New System.Data.SqlClient.SqlCommand("SP_Name", sqlConn)
    Dim dtVehicle As New DataTable

    With sqlCmdVehicle
        .Parameters.AddWithValue("FullStockNo", "N102010")
        .CommandType = CommandType.StoredProcedure
    End With

    sqlConn.Open()
    sqlAdapter.SelectCommand = sqlCmdVehicle
    sqlAdapter.Fill(dtVehicle)

数据库已备份,并已成功在新服务器上还原。当我尝试使用新的SQL Server 2008运行时,出现错误:

找不到存储过程'SP_Name'。指向最后一行。

我可以用'MS SQL Management Studio'看到的过程不是dbo.SP_Name,而是John.SP_Name

当我改变

System.Data.SqlClient.SqlCommand("SP_Name", sqlConn)

进入

System.Data.SqlClient.SqlCommand("John.SP_Name", sqlConn)

都工作良好,但是与所有其他过程相同,并且在代码中有很多类似的地方:(

我得到了http://msdn.microsoft.com/en-us/library/ms189915.aspx,但呼叫者的默认架构正确。同样,在旧盒子上一切正常。

我应该在SQL中解决哪些问题,以允许运行SP时没有明确提到的用户/模式名称?

谢谢。

====================================== =>

不幸的是,我没有找到好的解决方案。我采用的方式是在整个项目中将SP_Name搜索并替换为John.SP_Name。感谢所有参与者。

SQL Server 2005/2008,db = user = schema = owner ='John',ASP.net 2.0.50727,vb,IIS7我正在将网站从一台服务器移到另一台服务器。这段代码在带有SQL Server 2005的旧服务器上运行良好。...

asp.net sql-server sql-server-2005 sql-server-2008 stored-procedures
7个回答
2
投票

我不确定100%,但是您可能使用sql用户名/ pw连接到数据库,然后使用用户名“ john”。


1
投票

如果您运行SQL Profiler并查看跟踪数据,您将确切地知道发生了什么。您将看到对数据库的确切调用以及发生的情况。


1
投票

在SQL Server中>数据库>您的数据库名称>安全性>模式


1
投票

我们今天发现,即使您在数据库中为用户指定了默认架构,如果您将用户权限更改为SQL Server上的sysadmin,则如果您尝试运行存储过程,则默认架构将被忽略。如果不指定模式名称,它将认为该存储过程在dbo模式下!当您从登录用户中删除sysadmin权限时,如果您在EXEC命令中未指定任何模式名称,它将使用为该数据库设置的默认模式运行存储过程。


0
投票

SQL Server 2008的默认架构为“ dbo”。这就是为什么它试图打dbo.SP_Name


0
投票

不幸的是,我没有找到好的解决方案。我采用的方式是在整个项目中将SP_Name搜索并替换为John.SP_Name。感谢所有参与者。


0
投票

@@ putnik已经选择了答案,但是对此有解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.