【发布时间】:2016-03-14 00:22:00
【问题描述】:
在我的数据库中,我有 2 个模式:[dbo] 和 [rch]([rch] 被选为我们“存档”数据的名称,这样这些表不会出现在[dbo] 表之前)。
我在 SQL Server Management Studio (SSMS) 中为此表创建了一个名为 rchuser 的用户:
- 请注意,在添加用户时,
rch被列为默认架构。
- 请注意,此新用户同时拥有
db_owner和rch。
假设我有这个 SQL 插入:
public static int AddRecord(object value, string sqlConnection)
{
int result = 0;
using (var conn = new System.Data.SqlClient.SqlConnection(sqlConnection))
{
conn.Open();
var sqlCmd =
"INSERT INTO Table1 ([Value], [Stamp]) " +
"VALUES (@Value, GETDATE()); ";
using (var cmd = new System.Data.SqlClient.SqlCommand(sqlCmd, conn))
{
cmd.Parameters.AddWithValue("@Value", value);
result = cmd.ExecuteNonQuery();
}
}
return result;
}
我使用我的rchuser 凭据向该方法传递了一个连接字符串。
var conn = "Data Source=localhost;Initial Catalog=DatabaseN;User Id=rchuser;Password=password;"
没有错误,结果为 1,但新记录不在我的 [rch] 架构的对应表中。
就像数据库完全忽略了这个用户默认使用[rch] 架构的事实。
我什至尝试使用rchuser 登录SSMS 数据库手动执行命令。同样,没有错误。数据进入[dbo]。
如何将所有数据库输入定向到另一个架构?
【问题讨论】:
-
哦:使用 SQL Server 2014
-
您能否验证 Table1 存在于这个其他架构中?
-
@WiktorZychla,是的,我在另一个模式中创建了表。它不称为 Table1,目录也不是 DatabaseN。我的雇主对他上网的信息有点偏执。
-
如果您收回 dbo 所有权(第二屏)怎么办?
-
@WiktorZychla -
rchuser然后无法打开数据库。它可能仍然可以调用代码。我没有检查那部分。根据我的理解,将[rch]指定为默认值应该可以做到。
标签: c# database tsql sql-server-2014