Questions tagged «sql-server»

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

3
在SQL Server 2012中索引PK GUID
我的开发人员已将其应用程序设置为将GUID用作几乎所有表的PK,并且默认情况下,SQL Server已在这些PK上设置了聚集索引。 该系统还比较年轻,我们最大的表刚刚超过一百万行,但是我们正在研究索引并希望能够迅速扩展,因为不久的将来可能会需要它。 因此,我的第一个倾向是将聚集索引移动到创建的字段,该字段是DateTime的bigint表示形式。但是,使CX唯一的唯一方法是在此CX中包括GUID列,但先创建顺序。 这会导致群集密钥太宽,是否会提高写入性能?读取也很重要,但是此时写入可能是一个更大的问题。

3
断开网络连接会停止查询吗?
我最近对100,000条记录执行了更新查询。我意识到在查询运行时我犯了一个错误,并迅速拔下了网络电缆。 更新查询吗 停止处理并完全回滚? 继续处理以完成并提交? 停止处理,只保留部分目标行更新?

3
如何查看SQL Server 2008中的内存中缓存了什么?
有没有一种方法可以找出SQL Server 2008 R2中缓存的内容?我找到了以下不错的文章:http : //blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache。但是,我想知道每个表和索引存储了多少数据(例如百分比和KB)。是否有一些简单的方法来获取此类数据?

2
重置SQL Server 2012序列
我正在测试和填充利用该SEQUENCE对象的特定表。在这个过程中,我正在测试用成千上万的插入行填充表(因为我不熟悉如何编程)。我在此特定表上看到的问题是,当我开始另一个人口测试时,SEQUENCE它不会重置回我想要的第一个数字(即1)。 当我希望重新运行新测试时,请删除有问题的表,然后运行以下命令: DROP SEQUENCE foo.fee; GO DROP SCHEMA foo; GO 当我想重新运行测试时,我运行以下SCHEMA&SEQUENCE命令,它们按以下顺序触发: CREATE SCHEMA foo; GO CREATE SEQUENCE foo.fee START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE; GO 然后创建表: CREATE TABLE foo.sample_table_with_data (order_number bigint PRIMARY KEY NOT NULL, sample_column_one nvarchar(max) NULL, sample_column_two nvarchar(max) NULL, sample_column_three nvarchar(max) NULL) GO 一旦完成,我将运行以下插入命令50,000次: …

4
相互验证两个表的快速方法
我们正在执行ETL流程。说完所有的话,有一堆表应该是相同的。验证那些表(在两个不同服务器上)实际上是否相同的最快方法是什么。我在说模式和数据。 我可以像在单个文件或文件组上一样对表进行哈希运算吗?可以相互比较。我们有Red-Gate数据比较,但是由于有问题的表包含数百万行,因此我希望每个表都具有更高的性能。 一种吸引我的方法是对联合声明的创造性使用。但是,如果可能的话,我想进一步探讨一下哈希概念。 发布答复更新 对于任何未来的参观者……这就是我最终采取的确切方法。效果很好,我们正在每个数据库中的每个表上执行此操作。感谢下面的回答为我指出了正确的方向。 CREATE PROCEDURE [dbo].[usp_DatabaseValidation] @TableName varchar(50) AS BEGIN SET NOCOUNT ON; -- parameter = if no table name was passed do them all, otherwise just check the one -- create a temp table that lists all tables in target database CREATE TABLE #ChkSumTargetTables ([fullname] varchar(250), [name] …

4
登录不会在可用性组之间同步
AlwaysOn组中有2台服务器。 每个同步数据库中的用户帐户都位于两台服务器上,而数据库实例级别的登录仅存在于其中一台服务器上。即一台服务器上缺少DBINSTANCE-> Security-> Logins。 因此,当发生故障转移时,我在第二台服务器上遇到登录失败(该服务器没有相应的实例级别登录名)。 我该如何克服这个问题?我是否应该以特殊方式设置用户帐户?

4
CREATE FILE遇到操作系统错误5(访问被拒绝。)
我正在尝试在SQL Server Management Studio中执行以下脚本: USE [master] GO CREATE DATABASE [test1] ON PRIMARY ( NAME = N'test1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf', SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) LOG ON ( NAME = N'test1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf', SIZE = 164672KB , MAXSIZE = …

2
SQL Agent如何以及何时更新next_run_date / next_run_time值?
我一直在研究T-SQL中的代码,以便使用msdb数据库中的sp_add_jobschedule proc将新日程表添加到SQL Agent作业中。当我添加新计划(通常在特定日期/时间运行一次)并立即查看sysjobschedules和sysschedules中的值时,我可以看到已添加新计划并将其绑定到SQL Agent的job_id工作。但是,next_run_date和next_run_time的值中有0。当我回来在2或3分钟内再次查看它们时,它们中仍然显示0。但是,当我在5或10分钟后再回来时,它现在可以正确显示与下一次计划运行相对应的日期和时间值。 所以我的问题是: 这些值多久更新一次? 更新这些值的过程是什么? 如果我要添加一个计划,例如未来1分钟,那么这是否意味着作业尚未运行,因为next_run_date / time还没有更新? 我用于添加新时间表的代码示例: exec msdb.dbo.sp_add_jobschedule @job_id = @jobID , @name = @JobName , @enabled = 1 , @freq_type = 1 , @freq_interval = 0 , @freq_subday_type = 0 , @freq_subday_interval = 0 , @freq_relative_interval = 0 , @freq_recurrence_factor = 0 , @active_start_date …



2
SQL Agent Powershell上下文参考
在我的新工作中,每个服务器上都有多个命名实例。例如 Server1 \ Dev Server1 \ DevIntegrated 服务器1 \质量检查 我的作品中有一个SQL PowerShell脚本,可以调用OS,调用它,Foo.exe但需要传递命令行参数(连接字符串)。每个实例上都将存在一个SQL Agent作业,其步骤为PowerShell类型,该步骤需要知道当前上下文是什么。即此执行从DevIntegrated开始。 我不希望每个脚本都以...开头 $thisInstance = "Dev" ...特别是因为在接下来的几个月中,当我们迁移到环境(新服务器和命名实例)时,我必须对其进行编辑。 如果启动SQLPS,则可以通过将Get-Location的结果切片和切块或运行来确定实例 (Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName 当SQL Agent启动PowerShell类型的作业时,它将在C:\ windows \ system32中启动,并且该Get-Location路由不起作用,因为它不在SQLSERVER上下文中。我可以更改为该上下文,但是我将位于SQL Server的“根目录”,并且不知道我应该在哪个实例中使用。Invoke-Sqlcmd由于相同的原因,使用路由也不起作用(从技术上讲,它在那里超时了)不是默认实例) 据我所知,我已经列举了所有可以进入工作日志的基本“内容”,但似乎没有任何显示 SQLSERVER:\SQL\Server1\DevIntegrated Get-ChildItem Get-Host Get-Location Get-Process Get-PSDrive Get-PSProvider Get-Service Get-TraceSource Get-Variable Get-Process似乎我可以使用它以及通过敲击实例和匹配spid来拼凑事物的一些巫术,但这听起来像是来自地狱的血腥骇客。我必须缺少一些基本的东西,有人可以阐明吗? 研究了PowerShell的替代方法 我调查了其他工作类型,但没有得到满意的解决方案。研究表明,SQL代理下列出的PowerShell为SQLPS,并通过右键单击该代理来启动它的实例,从而自动将我放到正确的位置。如前所述,只有当我将交互式代码粘贴到工作步骤中时,我才知道其中的区别。 作业类型的OS使我进入了相同的状态,因为我无法找到确定哪个实例将我放入命令外壳的方法。当然,我可以sqlcmd并获取的值,@@servername但是如果我知道启动sqlcmd的连接,则无需查询数据库;) 如果启用了TSQL,TSQL可能会起作用,xp_cmdshell但是我不确定它们是否已启用---政府工具,并且在使用非默认设置时可能会感到困惑。即便如此,我仍然沉迷于动态SQL,并失去了PowerShell提供的许多表达能力。 虽然有点麻烦,但我认为第一步要定义一个变量,然后将其传递给后续步骤,但是研究发现这篇文章处理多个作业步骤(BOL) 作业步骤必须是独立的。也就是说,作业无法在作业步骤之间传递布尔值,数据或数字值。但是,您可以使用永久表或全局临时表将值从一个Transact-SQL作业步骤传递到另一步骤。您可以使用文件将运行可执行程序的作业步骤中的值从一个作业步骤传递到另一作业步骤。 我不能使用常见的技巧,例如Foo.exe寻找众所周知的文件/环境变量/注册表设置,因为那样会阻止跨实例的并发执行。 …

1
SQL Server / T-SQL是否支持行连续以拆分长字符串?
有时我的SQL脚本包含一个或多个超长(有时甚至是愚蠢的长)字符串。通常,这些是VARBINARY表示文件/程序集的文字/常量,但有时它们是文本。 字符串很长的主要问题是某些文本编辑器不能很好地处理它们。例如,我有一个VARBINARY我在CREATE ASSEMBLY [AssemblyName] FROM 0x....语句中使用的文字,而程序集本身的大小刚好超过1 MB,相当于文本文件中的刚好超过200万个字符,因为每个字节都需要用十六进制表示法表示两个字符(例如0x1F= a 1和an F)。SQL Server Management Studio(SSMS)不能很好地处理此问题,并且在我尝试滚动浏览该行时挂起了几秒钟。实际上,某些版本(不确定是否还会发生这种情况)甚至在打开脚本时会显示关于长行的警告,该脚本的长度至少有一行。 第二个问题是,在没有启用自动换行功能的编辑器中使用或在线发布时,会使格式复杂化。这里的问题是,水平滚动条的滑块非常狭窄,即使将其稍微移动通常也会使非超长文本滚动到视线之外。 现在,T-SQL不再使用换行符甚至分号来终止命令(尽管从SQL Server 2005开始,分号是首选/推荐的分号)。因此,由于SQL Server知道如何解析每个语句以使其知道何时结束,因此似乎将长行拆分为仅由newline/ carriage-return+ 分隔的多行line-feed似乎不是不合理的。但这两种情况都不起作用。 PRINT 'Line1 Line2'; 返回(在“消息”标签中): Line1 Line2 这很有意义,因为换行符位于文字/常量内。但是,对于a执行此操作VARBINARY也不起作用。 PRINT 0x1234 5678; 给我一个错误。


2
卡在管理工作室中的任务,您如何处理?
在Management Studio中单击“使数据库脱机”后,此消息将保持挂起状态,如果单击“关闭”,则不会关闭。 在Management Studio中处理此类卡住工作的好方法是什么?您可以通过活动监视器将其杀死吗?我是否应该寻找阻止该工作进行并终止的过程?
13 sql-server  ssms 

3
在SQL Server 2014中查询慢100倍,行计数假脱机行估计是罪魁祸首?
我有一个查询,该查询在SQL Server 2012中运行800毫秒,在SQL Server 2014中运行约170秒。我认为我已将其范围缩小到Row Count Spool运营商的基数估计不佳。我已经读过一些关于假脱机操作符的信息(例如,here和here),但是仍然难以理解以下几点: 为什么此查询需要Row Count Spool运算符?我认为正确性不是必需的,那么它试图提供什么特定的优化? 为什么SQL Server估计联接到Row Count Spool运算符会删除所有行? 这是SQL Server 2014中的错误吗?如果是这样,我将提交Connect。但是我想先加深了解。 注意:LEFT JOIN为了在SQL Server 2012和SQL Server 2014中都能达到可接受的性能,我可以将查询重新编写为或向表中添加索引。因此,此问题更多地是关于深入了解此特定查询和计划的,而较少涉及如何用不同的措词查询。 慢查询 有关完整的测试脚本,请参见此Pastebin。这是我正在查看的特定测试查询: -- Prune any existing customers from the set of potential new customers -- This query is much slower than expected in SQL Server 2014 SELECT …

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.