积极答复者
关于sql server 2008 express 查询Attach数据库的问题。

问题
-
步骤:
1、启动系统时,打开Windows资源管理器,查看进程中,不存在sqlservr.exe进程,使用sqlcmd -E -S .\sqlexpress -dmaster
2、执行查询select name from sysdatabases,结果应该是4个数据库。
3、启动Visual Studio 2010,在服务器资源视图中,选择数据库连接,附加(或者新创建)一个数据库文件,并连接上。(比如D:\TestDB.mdf文件)
4、查看Windows资源管理器进程,多了一个sqlservr.exe进程,再使用sqlcmd -E -S .\sqlexpress -dmaster,执行第2步的操作,发现结果还是四个数据库,没有3步附件的数据库。
我的问题,如果使用sqlcmd 连接我第3步连接成功的数据库。
答案
全部回复
-
1、服务肯定是启动的,否则第一步使用sqlcmd连接不上数据库的。第2步也查询不出四个数据库
2、在没有附件数据库的情况下,查询的结果应该只有4个系统库。
4、使用Visual Studio的服务器资源管理器连打开数据库,查询连接的字符串是:Data Source=.\SQLEXPRESS;AttachDbFilename=D:\TestDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True,看来应该还是SQLEXPRESS实例。
-
刚才测试了一下,如果express实例里原本没有任何用户库,当我在VS里附加数据库的时候,然后刷新
SSMS对象资源管理器,可以看到附近的数据库路径,但是使用TSQL查询该数据库则报错,找不到用户库
估计VS只是利用sql express的组件来连接数据库,并没有在 sysdatabases表中注册当前用户库
所以LZ就看不到了,如果LZ要看到您的用户库还是在sqlcmd里使用系统存储过程sp_attach_db来附加数据库
EXEC [sys].[sp_attach_db] @dbname = NULL, -- sysname @filename1 = N'', -- nvarchar(260) @filename2 = N'', -- nvarchar(260) @filename3 = N'', -- nvarchar(260) @filename4 = N'', -- nvarchar(260) @filename5 = N'', -- nvarchar(260) @filename6 = N'', -- nvarchar(260) @filename7 = N'', -- nvarchar(260) @filename8 = N'', -- nvarchar(260) @filename9 = N'', -- nvarchar(260) @filename10 = N'', -- nvarchar(260) @filename11 = N'', -- nvarchar(260) @filename12 = N'', -- nvarchar(260) @filename13 = N'', -- nvarchar(260) @filename14 = N'', -- nvarchar(260) @filename15 = N'', -- nvarchar(260) @filename16 = N'' -- nvarchar(260)