标签: sql-server

截断表需要哪些权限?

我有一个对数据库具有以下权限的 SQL 帐户:

在此处输入图片说明

db_executor您看到此帐户所属的角色是由以下脚本创建的:

CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO

GRANT EXECUTE TO [db_executor] 
GO
Run Code Online (Sandbox Code Playgroud)

当我运行一个select,update,insert或delete放在桌子上,它工作正常。当我尝试truncate桌子时,它给了我这个错误信息:

找不到对象“TableName”,因为它不存在或您没有权限。

此帐户缺少什么权限?

sql-server permissions truncate sql-server-2012

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

在 SQL Server 中,读锁是如何工作的?

假设我有以下长时间运行的查询

UPDATE [Table1]
SET [Col1] = 'some value'
WHERE [Col2] -- some clause which selects thousands of rows
Run Code Online (Sandbox Code Playgroud)

并假设在上述查询运行时执行以下查询

SELECT *
FROM [Table1]
Run Code Online (Sandbox Code Playgroud)

第一个查询是否阻止第二个查询运行,直到第一个查询完成?如果是这样,第一个查询会阻止第二个查询在所有行上运行还是仅在 WHERE 子句中涉及的行上运行?

编辑:

假设第二个查询是

SELECT [Col1], [Col2]
FROM [Table1]
WHERE [Col2] -- some clause whose matching elements overlap those from
             -- the clause in the first query and which has additional matching elements
Run Code Online (Sandbox Code Playgroud)

sql-server locking

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

使用作业开始时间查看 SQL Server 中正在运行的作业的脚本

如何编写脚本以查看 SQL Server 中正在运行的作业和作业开始时间?

SELECT sj.name, 
 sja.run_requested_date, 
 CONVERT(VARCHAR(12), sja.stop_execution_date-sja.start_execution_date, 114) Duration
FROM msdb.dbo.sysjobactivity sja
INNER JOIN msdb.dbo.sysjobs sj
ON sja.job_id = sj.job_id
WHERE sja.run_requested_date IS NOT NULL
ORDER BY sja.run_requested_date desc;
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-agent

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

为什么我不能使用 CASE 语句来查看列是否存在而不是从中选择?

为什么这样的事情不起作用?

SELECT
CASE 
WHEN NULLIF(COL_LENGTH('Customers', 'Somecol'), '') IS NULL THEN NULL
ELSE Somecol
END AS MyTest
FROM Customers;
Run Code Online (Sandbox Code Playgroud)

我只是检查该列是否存在,但是,SQL Server 抱怨Somecol不存在。在单个语句中是否有替代方法?

sql-server t-sql

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

更改表时“无法创建大小为 8074 的行,该行大于允许的最大行大小 8060”

我正在尝试更改表中的列。现有的表是这样的:

CREATE TABLE [dbo].[table](
   [id1] [int] NOT NULL,
   [id2] [int] NOT NULL,
   [id3] [int] NOT NULL,
   [name] [nvarchar](255) NOT NULL,
   [id4] [int] NOT NULL,
   [xmlData] [xml](CONTENT [dbo].[xml_schema]) NULL,
   [booleanData1] [bit] NOT NULL,
   [notes] [varchar](4096) NULL,
   [id5] [int] NULL,
   [booleanData2] [bit] NULL,
   [id6] [int] NULL,

   CONSTRAINT [PK_table] PRIMARY KEY CLUSTERED 
   ([id1] ASC, [id2] ASC, [id3] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

现在我试图在这个表上执行这个 sql:

ALTER TABLE [table] ALTER COLUMN [xmlData] XML
Run Code Online (Sandbox Code Playgroud)

这样我就可以删除 xml 模式并用新的模式替换它。

但我收到此错误:

无法创建大于允许的最大行大小 8060 的大小为 8074 的行。

谁能告诉我这里有什么问题?

sql-server sql-server-2012

18
推荐指数
1
解决办法
3737
查看次数

内存优化表 - 它们真的很难维护吗?

我正在研究从 MS SQL 2012 升级到 2014 的好处。SQL 2014 的一大卖点是内存优化表,这显然使查询速度超快。

我发现内存优化表有一些限制,例如:

  • 没有(max)大小的字段
  • 每行最大 ~1KB
  • 无timestamp字段
  • 没有计算列
  • 没有UNIQUE限制

这些都属于麻烦事,但如果我真的想解决这些问题以获得性能优势,我可以制定计划。

真正的问题是您无法运行ALTER TABLE语句,并且每次向索引列表添加字段时都必须经历这些繁琐INCLUDE的过程。此外,您似乎必须将用户拒之门外,才能对实时数据库上的 MO 表进行任何架构更改。

我觉得这简直太离谱了,以至于我实际上无法相信 Microsoft 会在此功能上投入如此多的开发资金,却让其维护起来如此不切实际。这使我得出结论,我一定是拿错了棍子的一端;我一定误解了内存优化表的某些内容,这让我相信维护它们比实际困难得多。

那么,我误解了什么?你用过MO表吗?是否有某种秘密开关或过程使它们易于使用和维护?

index sql-server alter-table sql-server-2014 memory-optimized-tables

18
推荐指数
2
解决办法
4402
查看次数

EXCEPT 运算符与 NOT IN

该EXCEPT运营商已在SQL Server 2005中引入的,但之间有什么区别NOT IN和EXCEPT?

它也这样做吗?我想用一个例子做一个简单的解释。

sql-server-2005 sql-server sql-server-2008-r2 operator except

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

如何衡量或查找创建查询计划的成本?

我有一个典型的例子,参数嗅探导致一个“坏”的执行计划进入计划缓存,导致我的存储过程的后续执行非常缓慢。我可以用局部变量OPTIMIZE FOR ... UNKNOWN、 和来“解决”这个问题OPTION(RECOMPILE)。但是,我也可以深入查询并尝试优化它。

我正在尝试确定我是否应该:鉴于解决问题的时间有限,我想知道不这样做的成本。在我看来,如果我坚持使用OPTION(RECOMPILE),净效果是每次运行查询时都会重新创建查询计划。所以,我想我需要知道:

如何找出创建查询计划的成本是多少?

为了回答我自己的问题,我在谷歌上搜索过(例如使用这个查询),并且我已经浏览了dm_exec_query_statsDMV列的文档 。我还检查了 SSMS 中的“实际查询计划”的输出窗口以找到此信息。最后,我搜索了 DBA.SE。这些都没有得到答案。

谁能告诉我?是否可以找到或测量创建计划所需的时间?

sql-server execution-plan

18
推荐指数
1
解决办法
4761
查看次数

更改sa密码

我正在尝试使用 SQL Server Management Studio 2012 更改 sa 帐户的密码。我已按照以下步骤操作,但密码仍然相同。

  1. 登录到 SQL Server Management Studio,选择数据库引擎、\SBSmonitoring、Windows 身份验证。
  2. 转到对象资源管理器--安全文件夹--登录文件夹。
  3. 右键单击 SA 帐户并选择“属性”选项。
  4. 在 General Page 中,更改 SA 密码并确认。
  5. 在状态页面中,将登录更改为已启用。单击确定以保存更改。
  6. 重新启动 SQL Server 及其所有服务。

任何的想法 ?

sql-server

18
推荐指数
2
解决办法
12万
查看次数

将日期 yyyy-mm-dd 转换为整数 YYYYMM

我如何转换@dateb:

SET @dateb = dateadd(month, datediff(month, 0, getdate()) - 3, 0)
Run Code Online (Sandbox Code Playgroud)

2014-04-04作为日期返回到整数201404

谢谢

sql-server

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