标签: sql-server

Microsoft SQL Server 的自有架构和角色成员身份之间的区别

Owned Schemas和之间有区别Role Members吗?

根据我的理解,这Role Members是强制性的 - 用户需要至少Role Members选中一个复选框。

然而,这Owned Schemas不是强制性的。这真的让我想知道为什么需要Owned Schemas在那里。

在此处输入图片说明

schema sql-server role

25
推荐指数
1
解决办法
3万
查看次数

24
推荐指数
3
解决办法
3万
查看次数

我应该在完整备份期间停止事务日志备份吗?

我有两个 SQL 代理作业,它们计划以不同的时间间隔运行。第一个作业每天运行一次完整备份。第二个作业每十五分钟运行一次事务日志备份。

随着数据库的增长,完整备份的时间比原计划的要长(即使有压缩)。我从我的日志中注意到事务日志备份现在同时运行。

我是否应该更改事务日志备份的计划,以便在运行完整备份时不运行?有关系吗?

sql-server backup sql-server-2008-r2

24
推荐指数
2
解决办法
7222
查看次数

为什么`SELECT @@IDENTITY` 返回一个小数?

我正在使用Dapper对来自 ASP.NET MVC 3 (.NET 4.0) 应用程序的 SQL Server 2008 R2 Express 实例执行以下查询。

INSERT INTO Customers (
         Type, Name, Address, ContactName, 
         ContactNumber, ContactEmail, Supplier)
VALUES (
         @Type, @Name, @Address, @ContactName, 
         @ContactNumber, @ContactEmail, @Supplier)

SELECT @@IDENTITY
Run Code Online (Sandbox Code Playgroud)

对 的调用connection.Query<int>(sql, ...)正在引发无效的强制转换异常。我已经调试了它,它是在 Dapper 调用GetValue返回的SqlDataReader.

的返回类型GetValueObject,在调试器中检查它显示它是一个装箱十进制。

如果我将选择更改为SELECT CAST(@@IDENTITY as int),则 GetValue 的返回是一个装箱的 int 并且不会引发异常。

Id 列绝对是 int 类型;为什么会SELECT @@IDENTITY返回一个小数?

一些附加信息:

  • 数据库是全新的。
  • 客户表是我添加到其中的唯一对象。数据库中没有其他(用户)表、视图、触发器或存储过程。
  • 数据库中有 10 行,Id 为 1,2,3,4,5,6,7,8,9,10(即该列不超出 int …

sql-server ado.net t-sql

24
推荐指数
3
解决办法
1万
查看次数

SQL 编译对 SQL Server 性能的影响有多大?

我正在分析 SQL Server 2005 的一个实例,通过 PerfMon 的SQLServer:SQL Statistics - SQL Compilations/sec指标,我看到平均值约为 170 左右。

我拿出 SQL Profiler 并寻找 SP:Compile 或 SQL:Compile 事件。显然它们不存在。我确实发现Stored Procedure/SP:RecompileTSQL/SQL:StmtRecompile事件。我在 Profiler 中看到的数据量表明这些是错误的事件,尽管我不确定。

所以我的问题。对其中任何一个的回答都会很棒。

  1. 如何查看 SQL Server 中编译的内容?
  2. 我是否选择了错误的指标来查看?在 Perfmon 或 SQL Profiler 中?
  3. 至于Stored Procedure/SP:RecompileTSQL/SQL:StmtRecompile事件在SQL事件探查器,他们不包括持续时间度量。如果这些事件无法查看对系统的时序影响,我该如何衡量这些事件对系统的影响。

performance sql-server-2005 sql-server perfmon

24
推荐指数
2
解决办法
3万
查看次数

Merge 语句本身死锁

我有以下过程(SQL Server 2008 R2):

create procedure usp_SaveCompanyUserData
    @companyId bigint,
    @userId bigint,
    @dataTable tt_CoUserdata readonly
as
begin

    set nocount, xact_abort on;

    merge CompanyUser with (holdlock) as r
    using (
        select 
            @companyId as CompanyId, 
            @userId as UserId, 
            MyKey, 
            MyValue
        from @dataTable) as newData
    on r.CompanyId = newData.CompanyId
        and r.UserId = newData.UserId
        and r.MyKey = newData.MyKey
    when not matched then
        insert (CompanyId, UserId, MyKey, MyValue) values
        (@companyId, @userId, newData.MyKey, newData.MyValue);

end;
Run Code Online (Sandbox Code Playgroud)

CompanyId、UserId、MyKey 构成目标表的组合键。CompanyId 是父表的外键。此外,还有一个非聚集索引CompanyId asc, UserId asc

它是从许多不同的线程调用的,我一直在调用相同语句的不同进程之间出现死锁。我的理解是“with (holdlock)”对于防止插入/更新竞争条件错误是必要的。

我假设两个不同的线程在验证约束时以不同的顺序锁定行(或页面),因此是死锁。

这是一个正确的假设吗? …

sql-server deadlock sql-server-2008-r2 merge

24
推荐指数
3
解决办法
2万
查看次数

用户登录失败 - 错误 18456 - 严重性 14,状态 38

SQL Server 日志文件查看器显示的消息:

Login failed for user [User]
Error: 18456, Severity: 14, State 38
Run Code Online (Sandbox Code Playgroud)

它实际上意味着什么:

Failed to open the explicitly specified database
Run Code Online (Sandbox Code Playgroud)

我的问题:

对于严重性和状态的每种组合,是否有 18456 错误(登录失败)的所有变体的列表,以及有用的描述文本?

我有一个谷歌,但除了特定的组合之外找不到任何东西。

sql-server errors logins

24
推荐指数
2
解决办法
11万
查看次数

如何授予对表值函数的权限

我做得对吗……?

我有一个返回钱的函数...

CREATE FUNCTION functionName( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  RETURNS money AS BEGIN

  DECLARE @v_dint money   set @v_dint = computation_here
     set @v_dint = round(@v_dint, 2)

  RETURN @v_dint    
END 
GO 
Grant execute on functionName to another_user 
Go
Run Code Online (Sandbox Code Playgroud)

我只是想知道这是否可以转换为 iTVF?

我试过这样做,但出现错误:

CREATE FUNCTION functionName ( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  
RETURNS TABLE AS 
RETURN SELECT returnMoney = computation_here  
GO  
Grant execute on functionName to another_user  Go
Run Code Online (Sandbox Code Playgroud)

错误:

消息 4606,级别 16,状态 1,第 2 行授予或撤销特权 …

sql-server functions

24
推荐指数
1
解决办法
8万
查看次数

为什么 0 等于空字符串?

我需要一些帮助来找出以下T-SQL语句返回的原因1(true):

SELECT IIF( 0 = '', 1, 0)
Run Code Online (Sandbox Code Playgroud)

我猜有人改变了一个ANSI选项,比如SET ANSI_NULLS导致这种行为的其他东西。

我的问题是我加入了一些值,在最后一行集中我有由0''值连接的值,这是不正确的。

sql-server t-sql sql-server-2012

24
推荐指数
1
解决办法
1万
查看次数

DDL_admin 与 db_owner 权限

我正在接管一个项目,该项目涉及删除和限制我们服务器场中所有数据库用户的权限。(娱乐时间)

当前受限的权限之一是 db_owner 权限。
正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:

我想定义两者之间的确切区别(通知客户)。
但是,据我所知,两者之间的区别应该是:

  • db_accessadmin 权限
  • db_backupoperator 权限
  • db_securityadmin 权限

所以实际上他们会失去:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

一旦 db_owner 被上述四个角色取代,用户还有什么会丢失的吗?
这实际上在安全方面起到了很大的作用吗?

sql-server permissions

24
推荐指数
2
解决办法
7万
查看次数