当我把数据库设置为Single_User后,有些操作需要创建函数。
当我创建类似于下面的函数
CREATE FUNCTION [dbo].[AllNamedElementsInFolder]
(
@owner ObjectId
)
RETURNS
@result TABLE
(
Id UNIQUEIDENTIFIER PRIMARY KEY
)
当函数的返回类型是表时,有时会遇到类似下面的错误
Msg 924, Level 14, State 1, Procedure AllNamedElementsInFolder, Line 20
Database 'DbName' is already open and can only have one user at a time.
当我把返回表的参数改成了临时表,也会出现这个错误。只有当该参数改成了物理表,这个错误就消失了。请问有人知道这个是为什么么?
我不想创建物理表,请问还有什么解决办法么?
谢谢解答啦。
------解决方案--------------------
又是这个问题,你都变成了单用户了,创建的时候又要用到别的session的,所以不能用single_user。而不是是否物理表的问题,你试试物理表,也会报错的。
------解决方案--------------------
你的表值函数能返回物理表?
------解决方案--------------------
出现这个错误有三种情况:
1.连接到数据库处于单用户模式。
2.从另一个连接,对数据库处于单用户模式下运行一次查询。
3.从第一个连接运行跨数据库查询。
所以我觉得你的代码跟第三个错误有关,(使用表变量发生错误,表变量会使用tempdb,如果改成物理表错误就消失因为你没有运行数据库的查询)。
可以参考:http://support.microsoft.com/kb/220842
虽然是针对7.0版本的,但是高版本应该也相同。
------解决方案--------------------
但是我自己创建创建了一下不会出现你说的那个问题,能不能把你完整代码贴出来?
------解决方案--------------------
你能把你的代码贴出来吗?我按照你的代码使用表变量单用户创建函数不会报错啊。
------解决方案--------------------
如果没有游标会出错吗?
------解决方案--------------------
如果在有的版本不出问题有的问题出问题的话可以考虑上个CASE给MS。
------解决方案--------------------
另外函数创建临时表我在这边也试过了,没有问题。我的数据库版本是R2 RTM
------解决方案--------------------
你是用什么权限的用户来执行?我怀疑跟执行的用户,模式这些有关。。
袁方,你怎么看?
------解决方案--------------------
感觉跟权限应该没关系,我是sysadmin。你可以在微软的BUGLIST上边搜索看看有没类似的BUG.