我在另一个数据库中已经存在的数据库中创建了一个表。它最初是用旧的数据库数据填充的。表的 PK 必须接收那些记录中已经存在的值,因此它不能自动递增。
现在我需要新表将其 PK 作为自动增量。但是在 PK 已经存在并且有数据之后我该怎么做呢?
哪个数据库角色成员资格授予在 SQL Server 2012 中执行所有现有存储过程的权限?
我尝试为每个用户添加一个用户,但仍然无法执行存储过程。我不想EXECUTE单独授予每个存储过程,我想将用户添加到角色并且他能够执行其中的任何一个。
我有一个带有几个数据库的 SQL Server 2012 实例。在其中一个中,我创建了一个视图,它选择的不仅仅是数据库中的表。
我希望用户能够选择该视图,但不能选择其表。创建视图正是因为用户无法选择表。
我已阅读/sf/ask/25789011/和http://msdn.microsoft.com/en-us/library/ms188676。 aspx,但它仍然无法正常工作。
如果我GRANT SELECT TABLE TO USER对所有表执行 a ,用户就可以选择视图。但是如果我撤销到任何表,它就会失败。
这应该是一个简单的过程,但我无法让它工作。我以前见过它发生过(实例的所有者让我访问视图,但没有对它的表执行此操作)但我无法执行此操作或找到知道如何操作的人。
有人可以为我提供有关如何操作的教程或代码示例吗?
当用户SELECTs查看我收到的消息时:
对象
<TABLE>、数据库<DB>、架构的 SELECT 权限被拒绝dbo。
如果我授予该表的选择权,错误消息会将表名更改为视图读取的另一个表。
我们有 3 个 SQL Server 2012 实例,其中 2 个不是db_owner。我们的一些存储过程使用 DMV 和sys视图以及仅在本地执行时才有效的存储过程。
我想在我们的主实例中集中执行这些(我们的)存储过程,并从中远程执行这些存储过程。我尝试使用 SQL Server 代理作业,但它需要一些我不习惯做的配置,而且可能无论如何都无法访问。
有没有办法远程执行存储过程,最好使用链接服务器?
编辑:我们可以使用链接服务器,openrowset任何可以在简单 SQL 中运行的东西。我宁愿不使用 SSIS,因为这样做会将过程的一部分与简单的 SQL 分开,并需要多个平台来运行它。
我使用 .NET 在 SQL Server 2014 上执行 SQL 操作,这里是使用的代码:
using(SqlConnection conn = new SqlConnection(connectionString)){
//https://stackoverflow.com/questions/1880471/capture-stored-procedure-print-output-in-net
conn.InfoMessage += new SqlInfoMessageEventHandler(logSqlMessages);
conn.Open();
using(SqlCommand stmt = new SqlCommand{
Connection = conn,
CommandText = sql,
CommandTimeout = 30000 // The time in seconds to wait for the command to execute. The default is 30 seconds.
//,CommandType = CommandType.StoredProcedure
})
{
affectedRecords = stmt.ExecuteNonQuery();
} // using stmt
} // using conn
Run Code Online (Sandbox Code Playgroud)
当我查看 Active Monitor 时,有数十行引用相同的操作。它们都具有相同的session_id,其中一些具有正在运行的任务状态,并且大多数处于暂停状态。其中一些具有 LastWaitTime CXPACKET,大多数具有PAGEIOLATCH_SH.
我还在 SQL …
sql-server optimization ado.net activity-monitor sql-server-2014
考虑 5 个表,每个表都有超过 10 亿条记录。
一个查询需要加入它们。而且我知道他们需要的记录不到 10%。假设它们都有一个日期维度,并且只需要当月的数据。
什么应该更快:
1)使用简单的SELECT:连接所有表,然后过滤(WHERE)当月每个表的维度。
2)创建5个临时表,过滤每个源表为当月记录,这里我们也可以趁机只选择需要的列,然后加入这些临时表。
额外的可能性:
3) 维护二级表,只有当前月/年的数据。这些表由提供主要表的相同 ETL 维护。
我正在从一个文件开发 ETL,其中日期以“DDMMYYYY”格式表示,例如“31012016”。
我想获取这个字符串并将它直接传递给将插入数据的 SQL 文本。我不想将它解析为 C# DateTime 然后将其格式化为“YYYY-MM-DD”,以便 SQL Server 再次解析它。
正如我目前所做的那样,日期字符串由 .Net 解析一次,然后由 .Net 格式化并打印在 SQL 代码中,然后由 SQL Server 再次解析。我想从平面文件中获取字符串并将其直接放入 SQL 代码中,无需任何转换。
SQL Server 识别“YYYYMMDD”,但“DDMMYYYY”失败并显示消息:
从字符串转换日期和/或时间时转换失败。
例子:
DECLARE @datevar date = PARSE('31012016' as date using 'pt-BR');
SELECT @datevar;
Run Code Online (Sandbox Code Playgroud)
有没有办法让它工作?
我试过了,PARSE('31012016' as date using 'pt-BR')但引发了异常。TRY_PARSE返回空值。还尝试了CAST 和 CONVERT (Transact-SQL)但似乎不存在这种风格。
我正在开发一个 ETL,其提取步骤必须从表中读取数据。
有时我的用户对该表的访问权限被撤销。因此,为了避免 ETL 失败,在阅读表之前,我必须验证我是否有权这样做。如果没有,我将跳过提取步骤并运行 ETL 的其余部分。
验证我的用户是否对表具有读取权限的正确方法是什么?
假设一个表存储有关某个事件的粒度数据。它有事件的日期、大约 30K 类型的类型维度和大约 100 个类别的类别维度,以及一些数字事实。
平均每天有 1500 万笔交易。每年超过 50 亿,每十年超过 60G。这不是大数据,但数量很多。
SQL Server 2012 表可以容纳多少行?
当然,较旧的数据使用频率较低,并且可能会在同一数据库的多个表中进行分区。但是这种划分应该什么时候开始呢?一年一张桌子?5年?
从评论中收集的其他信息:
考虑一下:我有足够的存储空间来保存该事件的 300 亿条记录。如果每个事件记录需要 1KB,那么我在该表中有 30TB,以及足够的存储空间(以及它的日志)。它的PK是bigint。
您如何看待一张包含历史数据的表和另一张包含最新数据的表?该表没有事务性事件,而是有一个目录,例如客户。OLTP 的目录每天都被复制到 DW 中。所以我有一个包含历史数据的表和另一个包含最新记录的表。
在我使用的设计中,ETL 提供历史表,然后我使用 row_number() 通过其 NK 获取每个实体的最新记录。运行起来非常昂贵,但通过这种方式,我保留了过去存在的实体,不再存在于 OLTP 上。
我有一个 SQL Server 2012 实例和一个 Active Directory 组,我可以向其中添加 Active Directory 用户。我在该组中有我的个人 AD 帐户 (MyAccount) 和一个服务帐户 (ServiceAccount)。
我需要为整个实例授予对这个 AD 组的管理员访问权限。这意味着我不需要对创建的每个新表和数据库执行授权命令。该组中的任何用户都将自动能够创建、删除、插入、选择等。
甚至更棘手。我必须能够使用 Windows 身份验证通过 MyAccount 登录(我在 Windows 上登录,然后登录到 SQL Server,无需再次输入用户名-密码),并通过输入用户名和密码使用 ServiceAccount 登录。我不能被迫使用 ServiceAccount 登录 Windows(或使用该帐户运行 SSMS/SSDT/etc)才能登录 MSSQL。
配置它的最佳实践是什么?
security sql-server permissions sql-server-2012 active-directory
sql-server ×10
permissions ×4
optimization ×2
security ×2
ado.net ×1
date-format ×1
identity ×1
partitioning ×1
primary-key ×1
schema ×1
ssis-2012 ×1