gpt4 book ai didi

asp.net - 存储过程在 SQL Mgt Studio 中运行良好,但从 MVC 应用程序中抛出无效对象名称#AllActiveOrders

转载 作者:行者123 更新时间:2023-12-01 12:38:43 24 4
gpt4 key购买 nike

我可以将我的存储过程的“核心”作为一个巨大的查询来运行。在 SQL Management Studio 中就可以了。此外,我什至可以在 SQL Management Studio 中右键单击并“执行”存储过程 - .. 你知道的.. 将其作为存储过程运行。

当我的 ASP.NET MVC 应用运行这个存储过程时,我遇到了问题。

System.Data.SqlClient.SqlException: Invalid object name '#AllActiveOrders'.

运行 ASP.NET 的模拟帐户是否需要特殊权限?这不可能..即使我从我的 Visual Studio(在我的登录帐户下)在本地运行它,我也会收到临时表错误消息。


编辑:此外,当从一个 ASP.NET 应用程序(使用 WCF 服务/ADO.NET 调用存储过程)调用时它似乎工作正常,但从不同的 ASP.NET 应用程序(使用 ADO.NET 直接调用存储过程)


进一步:未崩溃的 MVC 应用程序确实将一些参数传递给存储过程,而崩溃的应用程序使用默认参数运行存储过程(不传递任何参数) . FWIW - 当我在 SQL Mgt 中运行存储过程时。 Studio,它具有默认参数(并且不会崩溃)。


如果它有任何值(value),我确实必须在出现这种情况之前解决“字符串或二进制数据将被截断”的问题。我进入了这个庞大的查询并修复了我知道是问题的诱人定义(一个不同的定义)(因为我大约一天前刚刚编辑过它)。我能够在 SQL Mgt 中看到“字符串/二进制截断”问题。 Studio/以及解决 SQL Mgt Studio 中的问题。但是,我真的很困惑为什么我在 SQL Mgt 中看不到“无效对象名称”问题。工作室

最佳答案

存储过程和临时表通常不能与数据库对象的强类型实现很好地混合(废话,数据集,我敢肯定还有其他)。

如果您将#temp 表更改为@variable 表,应该可以解决您的问题。

(显然)这在某些情况下有效:

IF 1=0 BEGIN
SET FMTONLY OFF
END

虽然根据http://msdn.microsoft.com/en-us/library/ms173839.aspx ,该功能被视为已弃用。

关于如何从临时表更改为变量表的示例如下:

create table #tempTable (id int, someVal varchar(50))

到:

declare @tempTable table (id int, someval varchar(50))

您应该考虑 temp 和 var 表之间的一些差异:

What's the difference between a temp table and table variable in SQL Server?

When should I use a table variable vs temporary table in sql server?

关于asp.net - 存储过程在 SQL Mgt Studio 中运行良好,但从 MVC 应用程序中抛出无效对象名称#AllActiveOrders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com