检索数据库兼容级别 - 相同服务器/数据库,不同用户的不同结果

时间:2012-10-09 15:21:15

标签: c# sql-server smo

我有以下代码来确定SQL Server数据库的兼容级别:

Microsoft.SqlServer.Management.Smo.Server server = new Server(myServerName);
if (!server.Databases.Contains(database)) 
  { throw new ArgumentException("Specified database ('" + myDBName+ "') not found on '" + myServerName + "'"); }

string connstr = string.Format("Data Source={0};" +
   "Persist Security Info=False;" +
   "User ID={1};" +
   "Password={2};Enlist=False;", myServerName, username, password);
server.ConnectionContext.ConnectionString = connstr;

Microsoft.SqlServer.Management.Smo.Database db = server.Databases[myDBName];
DataSet ds = db.ExecuteWithResults(@"select compatibility_level 
           from sys.databases where name=db_name()");

我有两个用户,其中一个能够运行此代码并获得正确的值。另一个用户运行此代码,使用完全相同的凭据连接到同一服务器/数据库,并且返回的DataSet不包含任何行。

两个用户之间可能会有什么区别会导致同一个查询没有结果?有没有更好的方法来获得数据库兼容性?

顺便说一句,此代码在SQL Server 2005到2012之间运行/工作。

编辑:我应该指出myServerName,myDBName,用户名和密码始终相同 - 唯一的区别是运行代码的两个不同的Windows用户。

1 个答案:

答案 0 :(得分:0)

我怀疑返回结果的用户是否已授予其登录权限的VIEW_ANY_DEFINITON权限。将此权限授予其他用户,他应该返回结果。