我正在从 C# 代码调用存储过程。该 SP 创建临时表来存储一些值。当我从查询分析器运行这个 SP 时,一切似乎都很好。但是当我从 c# 代码运行它时,没有创建临时表。
我使用的是@tableName 而不是#tableName。
临时表仅在存储过程中被引用。SP 之外不需要它们。 有什么我错过的吗?
我正在从 C# 代码调用存储过程。该 SP 创建临时表来存储一些值。当我从查询分析器运行这个 SP 时,一切似乎都很好。但是当我从 c# 代码运行它时,没有创建临时表。
我使用的是@tableName 而不是#tableName。
临时表仅在存储过程中被引用。SP 之外不需要它们。 有什么我错过的吗?
会话结束时会自动删除临时表,您确定它不只是在 C# 代码完成后被删除吗?查看文档以获取更多信息。
发生这种情况是因为您在查询分析器中使用的用户凭据(可能是“sa”?)可能与 C# 应用程序使用的用户凭据不同。
用户需要访问系统数据库 tempdb(读/写),否则在调用存储过程时无法创建这些临时表(在过程内)。
向 C# 使用的用户授予对 tempdb 的访问权限,或者使用您在查询分析器中使用的同一用户(或任何其他 dbadmin 用户)测试您的 C# 应用程序登录,以测试它是否有效。
根据您通过语句询问 SQL Profiler 的评论。
第 1 步:打开 sql profiler 并创建一个新的跟踪。转到选项卡事件选择。并取消标记安全审计和会话
第 2 步:选中右下角的 Show all events 复选框,您将在网格上看到几个事件。转到存储过程和 T-SQL 并在下面的屏幕截图中标记它们。
第三步:运行它。