【发布时间】:2019-06-05 09:35:51
【问题描述】:
我正在尝试创建一个具有 3 个参数的存储过程。另一个软件会用参数调用我的过程来查询一堆记录。
存储过程仅包含一个select 语句,其中where 子句根据参数进行过滤。
如何将这些记录返回给“调用者”?
我尝试将这些记录插入到临时表中,如下所示:
create procedure xxx
drop table table_temp
select * into table_temp from table where parameters
问题是,如果两个用户同时调用存储过程,他们会得到混淆的结果。
非常感谢您对这一困境的任何建议。
【问题讨论】:
-
临时表的名称must start with
#,但不清楚why您首先需要一个临时表而不是select。 -
正如@GSerg 所说,您的表不是临时表,它是您的 SP 所在的数据库中的物理表。因此同时运行多个 SP 实例 将导致不良行为。一个真正的临时表(以单个
#为前缀)仅保留在创建它的连接中,并且(同样重要的是)可以仅被创建它的连接引用。但是,我也看不到这里临时表的原因。无需删除和创建表(通过使用INTO运算符),只需使用SELECT。 -
select * from table where parameters? -
这取决于您如何从客户端代码调用该过程。记录已发送,但显然您忽略了它们。
-
似乎您应该询问的是您的应用程序,而不是 SQL(尽管 SQL 确实需要寻址)。
标签: sql sql-server stored-procedures