Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

1
在实时产品表上更改varchar的长度
我有一个与生产应用程序一起使用的MS SQL Server 2008 R2 DB服务器。 该应用程序的一项新增强功能现在需要varchar(100)增加表中一列的长度。 是否可以在不影响当前数据的情况下增加生产数据库中此现有列的长度? 是否必须在下班时间完成此更改,以避免服务中断?

4
是否可以将一列设为只读?
我很好奇是否可以用无法更改的列创建表,但表的其他列可以更改。 例如,我可以想象一个CreatedByUser永远不应该更改的列。 SQL Server是否为此提供了内置功能,还是只能通过触发器或其他方式实现?
25 sql-server 

2
您可以将COUNT DISTINCT与OVER子句一起使用吗?
我正在尝试改善以下查询的性能: UPDATE [#TempTable] SET Received = r.Number FROM [#TempTable] INNER JOIN (SELECT AgentID, RuleID, COUNT(DISTINCT (GroupId)) Number FROM [#TempTable] WHERE Passed = 1 GROUP BY AgentID, RuleID ) r ON r.RuleID = [#TempTable].RuleID AND r.AgentID = [#TempTable].AgentID 目前,根据我的测试数据,大约需要一分钟。对于此查询所驻留的整个存储过程的更改,我的输入量有限,但我可能可以让他们修改此查询。或添加索引。我尝试添加以下索引: CREATE CLUSTERED INDEX ix_test ON #TempTable(AgentID, RuleId, GroupId, Passed) 它实际上使查询所花费的时间增加了一倍。我得到一个非聚集索引相同的效果。 我尝试将其重写如下,但没有任何效果。 WITH …

3
使用SELECT-UPDATE模式时管理并发
假设您有以下代码(请忽略这很糟糕): BEGIN TRAN; DECLARE @id int SELECT @id = id + 1 FROM TableA; UPDATE TableA SET id = @id; --TableA must have only one row, apparently! COMMIT TRAN; -- @id is returned to the client or used somewhere else 在我看来,这不能正确地管理并发。仅仅因为您有一笔交易并不意味着其他人不会获得与您获得更新语句之前相同的值。 现在,将代码保持原样(我意识到这可以更好地作为单个语句处理,甚至可以使用自动增量/标识列更好地进行处理),有什么确定的方法可以使其正确处理并发并防止允许两个客户端获得相同竞争条件的竞争条件。 id值? 我非常确定,将WITH (UPDLOCK, HOLDLOCK)SELECT 添加到SELECT即可。该SERIALIZABLE事务隔离级别(因为它拒绝任何人阅读你做了什么,直到移植是在将似乎工作,以及UPDATE:这是假见马丁的答案)。真的吗?他们俩会平等地工作吗?是一个比另一个更好的选择吗? 想象一下,做比ID更新更合法的事情-基于需要更新的读取进行一些计算。可能涉及许多表,其中一些将要写入,而有些则不会。最佳做法是什么? 写完这个问题后,我认为锁定提示会更好,因为那样的话,您只锁定了所需的表,但是我很感谢任何人的投入。 PS:不,我不知道最佳答案,并且确实希望得到更好的理解!:)

1
报告服务和应用程序角色
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 第一张海报,长期潜伏在这里。在报表中激活应用程序角色的最佳方法是什么? 我尝试了不同的方法,到目前为止,唯一可行的方法是将调用嵌入到应用程序角色中,如下所示:- EXEC sp_setapprole 'REPORTZ', 's3cr3t'; select * from mytable where ID < 10000 在数据集中。它确实可以工作...但是我不喜欢(肯定不是我想融入生产环境的形状)。 我希望可以通过自定义程序集或Reporting Service中的某种“服务器挂钩”在运行时以某种方式“劫持”或“注入”应用程序角色激活行(在两种情况下,我都不知道如何) 非常感谢您的时间+亲切的关注。 YS。
25 sql-server  ssrs  role 

3
Windows 2008R2上SQL 2008R2的建议页面文件大小
此Microsoft文章- 如何确定64位版本的Windows Server 2008和/或Windows 2008 R2的适当页面文件大小,提供了计算64位Windows 2008和Windows 2008R2的页面文件大小的指南。毫无疑问,这对于通用服务器来说效果很好。我想知道针对在Windows 2008 / R2 64位上运行的SQL Server 2008R2的指导是什么? 我假设我们希望内存中的数据少到页面文件,否则SQL可能两次在磁盘上打数据。SQL Server甚至允许内存中的数据访问页面文件吗?我已经通过SQL Server 2008 R2联机丛书寻求指导,但是还没有提到页面文件的使用。 这是一个潜在的使用场景:给具有64GB RAM的物理服务器,整个64GB RAM是否需要页面文件?我们是否应该为96GB的页面文件做好准备?对于单个文件,这似乎有点过分。我知道传统的看法是Windows会将页面文件耦合到内存,以尝试在RAM上更容易地换出应用程序,但这是真的吗?小于64GB的页面文件会在此处影响性能吗?

6
当不存在sysadmin帐户时,如何在SQL Server 2008中向用户添加sysadmin
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我有一个正在运行的SQL Server 2008实例。不幸的是,在测试过程中,我取消了登录名的sysadmin权限,但现在无法读取(因为我没有sysadmin权限)。 除SA外,该实例没有其他sysadmin帐户。 我仅针对Windows身份验证进行了设置,因此将注册表中的LoginMode修改为2,以便可以使用Sql身份验证以SA身份登录。确实确实将登录模式设置为“混合”,但是默认情况下SA用户被禁用,由于我没有sysadmin权限,因此我无法重新启用它。 如何启用SA登录,以便进入系统管理员并将其重新分配给我的普通帐户?是否也有一个注册表设置,或者它存储在master数据库中?

3
我应该为哪种多语言网站选择哪种排序规则?
归类对查询速度有影响吗?表格的大小会根据排序规则进行更改吗? 如果我想建立一个必须支持所有可能语言的网站(以Google为例),那么推荐的整理方法是? 我将需要存储诸如之类的字符日本語,我在网站上的搜索将必须返回something以作为sóméthíng输入,并且它也必须不区分大小写。 我怎么知道哪个是最好的选择?哪种排序规则更适合这种情况?

3
如何取消SQL Server中的应用锁定请求?
该sp_getapplock存储过程有以下返回值: 0:成功同步授予锁。 1:在等待释放其他不兼容的锁之后,已成功授予该锁。 -1:锁定请求超时。 -2:锁定请求被取消。 -3:锁定请求被选为死锁受害者。 -999:表示参数验证或其他调用错误。 我正在编写一个用于sp_getapplock在数据访问层中调用的包装器,我想知道在什么情况下可以返回-2,以便抛出描述性且有用的异常。显而易见,返回值-1和-3意味着什么,我可以轻松创建导致返回这些值的测试条件。我如何设法获得-2的返回值?

3
与替代整数键相比,自然键在SQL Server中提供的性能更高还是更低?
我是代理键的粉丝。我的发现存在确认偏倚的风险。 我在这里和http://stackoverflow.com上看到的许多问题都使用自然键而不是基于IDENTITY()值的替代键。 我在计算机系统方面的背景告诉我,对整数执行任何比较运算都比比较字符串快。 该评论使我质疑我的信念,因此我认为我将创建一个系统来研究我的论点,即在SQL Server中用作键的整数比字符串快。 由于小型数据集之间的区别可能很小,因此我立即想到了两个表的设置,其中主表具有1,000,000行,而辅助表在主表中的每一行有10行,总共有10,000,000行。辅助表。我的测试的前提是创建两组这样的表,一组使用自然键,一组使用整数键,然后对一个简单的查询运行计时测试,例如: SELECT * FROM Table1 INNER JOIN Table2 ON Table1.Key = Table2.Key; 以下是我作为测试平台创建的代码: USE Master; IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1 BEGIN ALTER DATABASE NaturalKeyTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE NaturalKeyTest; END GO CREATE DATABASE NaturalKeyTest ON …

2
SQL Server-授予对整个架构与对象的权限?
对于SQL Sever中的数据库权限管理,我感到非常高兴。 让我们保持一个简单的例子。 假设帐户“ admin”是架构A,B和C的所有者。 您想要在架构A,B和C下创建的任何对象(表/视图)具有完全权限(更新/删除/插入/选择/更改)的另一个帐户“ minion”。 这可能吗?还是您每次在这些模式下添加表/视图时都必须执行Grant语句?(对我来说似乎有点愚蠢)。

2
如何使用单个查询插入或更新?
我有一个表测试,该表具有列ID,主键和自动递增的名称。我只想在没有记录的情况下插入新记录。 输入的ID为30122,名称为john 如果有ID为30122的记录,那么我将name列更新为john,如果没有记录,则我插入了一条新记录。 我可以使用2个查询 select * from test where id=30122 如果它有一些记录,那么我可以使用 update test set name='john' where id=3012 或者如果它没有记录,那么我可以使用 insert into test(name) values('john') 但是我想使用单个查询? 有人可以告诉它是否可能吗?

1
(NOLOCK)与NOLOCK
当我看到类似以下查询的查询时,我正在调查一些阻塞: SELECT SomeField FROM SomeTable NOLOCK 我看到了,NOLOCK并且很好奇它如何阻止其他查询(在本例中为DELETE语句)。我快速浏览了使用的锁sp_lock,这是我看到的内容: DB S GRANT TAB IS GRANT PAG S GRANT 现在,我的理解是NOLOCK应该只获取一个Schema-Stability锁,为什么它随后会获取IS锁? 我的好奇心激起了。我查看了BOL,发现有两种使用方法,WITH (NOLOCK)并且已经过时了(NOLOCK),所以我决定尝试一下。我运行以下查询,随后运行sp_lock: SELECT SomeField FROM SomeTable WITH (NOLOCK) DB S授权 TAB Sch-S GRANT SELECT SomeField FROM SomeTable (NOLOCK) DB S授权 TAB Sch-S GRANT 果然,这里有我的架构稳定性锁。所以我的问题是:这是怎么回事?如果使用NOLOCK的可接受语法是WITH (NOLOCK)或(NOLOCK),那么为什么仅使用普通NOLOCK字符(不带括号)运行查询时却不会出现查询错误?如果支持,为什么要抓住IS锁?我在这里想念什么?我一直在网上寻找答案,但到目前为止还很短。 我已经在2008R2和2012上对此进行了测试。

1
添加选择时超出自引用标量函数嵌套级别
目的 尝试创建自引用功能的测试示例时,一个版本失败,而另一个版本成功。 唯一的区别是添加SELECT到功能主体上,导致两者的执行计划不同。 起作用的功能 CREATE FUNCTION dbo.test5(@i int) RETURNS INT AS BEGIN RETURN( SELECT TOP 1 CASE WHEN @i = 1 THEN 1 WHEN @i = 2 THEN 2 WHEN @i = 3 THEN dbo.test5(1) + dbo.test5(2) END ) END; 调用函数 SELECT dbo.test5(3); 退货 (No column name) 3 该功能不起作用 CREATE …

3
SQL Server定期清除计划缓存和执行状态
将SQL Server 2014升级到2016后,服务器每隔几个小时会不断重置缓存的执行计划和dm*视图(如dm_exec_query_stats)等。 就像有人执行DBCC FREEPROCCACHE并DBCC DROPCLEANBUFFERS手动执行一样(除了没有人执行之外,它会自动发生)。 相同的数据库在SQL Server 2014和Windows Server 2012上都可以正常工作,在迁移到SQL Server 2016(和Windows Server 2016)之后一切都变了。 事情我检查:数据库并没有具备“自动关闭”标志。SQL Server ad hoc optimized设置为true(我认为这会有所帮助,但没有帮助)。“查询存储”为“关闭”。服务器有16 GB内存。 “ SQL Server日志”中也没有任何帮助。只是每周的备份消息... 我还检查了这篇文章https://docs.microsoft.com/zh-cn/sql/t-sql/statements/alter-database-transact-sql-set-options(向下滚动到“示例”部分,并在上面它)有自动清除计划的情况清单。这些都不适用。 更新: 不幸的是,这些建议都没有帮助。授予LPIM权限,检测并修复为同一查询生成大量计划的非参数化查询,从而降低“最大服务器内存” ...计划保持随机重置,从每隔几个小时到每5-10分钟一次。如果服务器“内存不足”,那么2014版在同一台机器上运行正常。 这是请求的sp_Blitz输出 **Priority 10: Performance**: - Query Store Disabled - The new SQL Server 2016 Query Store feature has not been enabled on …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.