Questions tagged «sql-server»

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

1
扩展事件允许的最大绑定动作数是多少?
如果在事件会话中向事件添加“太多”操作,则会收到此错误: 消息25639,级别16,状态23,第1行该事件“ [事件名称]”超出了允许的绑定操作数。 允许多少动作?它会因事件而变化吗? 根据实验,答案似乎是27 sqlserver.rpc_completed。但是我在任何Microsoft文档中都没有找到这个数字。而且似乎因事件而异,因为我能够获得30分sqlserver.sql_batch_completed。 失败的示例代码: CREATE EVENT SESSION [Test] ON SERVER ADD EVENT sqlserver.rpc_completed( ACTION( package0.callstack, package0.collect_cpu_cycle_time, package0.collect_current_thread_id, package0.collect_system_time, package0.event_sequence, package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.numa_node_id, sqlos.scheduler_address, sqlos.scheduler_id, sqlos.system_thread_id, sqlos.task_address, sqlos.task_elapsed_quantum, sqlos.task_resource_group_id, sqlos.task_resource_pool_id, sqlos.task_time, sqlos.worker_address, sqlserver.client_app_name, sqlserver.client_connection_id, sqlserver.client_hostname, sqlserver.client_pid, sqlserver.context_info, sqlserver.database_id, sqlserver.database_name, sqlserver.is_system, sqlserver.nt_username, sqlserver.plan_handle)) GO DROP EVENT SESSION [Test] …

4
此时只有一个管理员可以连接(MS SQL Server错误18461)
我正在试验给SQL Server少量内存的效果,我认为它会恢复。 我将SQL Server配置为使用200MB的内存,现在它不想启动,我在Internet上进行了一些搜索,建议我以单用户模式启动SQL Server。但是,我得到了错误 用户A的登录失败。原因:服务器处于单用户模式。此时只有一个管理员可以连接(Microsoft SQL Server,错误:18461) 我已经停止了SQL Server代理。
14 sql-server 

2
用于集成测试的SQL Server数据库快照
我正在尝试为集成测试定义一种使用测试数据库(在SQL Server中)的方法。 我的想法是在集成测试程序集启动时执行以下步骤: 创建一个完全空的数据库 运行“创建数据库对象”脚本以创建所有相关的数据库对象(表,视图,序列等) 填写“基础数据”(查找值等) 拍摄称为(db)_Basis“基准” 的数据库快照,以进行将来的集成测试 现在,在每个测试类(包含1-n个测试)之前,我打算简单地执行“从快照还原”以返回到数据库定义良好的或多或少的“空”状态。到目前为止,它就像一个魅力。 但是,有一组集成测试需要在大型测试数据库上进行操作-所以我希望在每个测试装置(具有n个单独测试的类)之前进行此操作 从(db)_Basis快照还原数据库 将那5万多行数据插入数据库 创建另一个快照(db)_With_Testdata快照 然后对于每个测试,将数据库重置为定义良好的(db)_With_Testdata快照版本,运行测试,验证结果等等。 问题是:我似乎无法同时拥有两个数据库快照-一旦这样做,就无法将我的数据库还原到其中任何一个....我一直收到此错误: 消息3137,级别16,状态4,第9行 数据库无法还原。错误地指定了主要名称或快照名称,未删除所有其他快照或缺少文件。 消息3013,级别16,状态1,第9行 RESTORE DATABASE正在异常终止。 这真的就是SQL Server数据库快照的工作方式吗?似乎有严格的限制.....我会理解是否不能直接返回到原始的“(db)_Basis”快照-但是仅由于我现在有两个快照,我什至无法返回最新的一个?!?!?

4
SELECT INTO语句的进度
我们的ETL流具有长期运行的SELECT INTO语句,该语句正在动态创建一个表,并在其中填充了几亿条记录。 该语句看起来像 SELECT ... INTO DestTable FROM SrcTable 为了便于监视,我们希望大致了解该语句在执行过程中的进度(大约行数,写入的字节数或类似的值)。 我们尝试了以下方法,但无济于事: -- Is blocked by the SELECT INTO statement: select count(*) from DestTable with (nolock) -- Returns 0, 0: select rows, rowmodctr from sysindexes with (nolock) where id = object_id('DestTable') -- Returns 0: select rows from sys.partitions where object_id = …

4
向现有PK添加自动增量
我在另一个数据库中已经存在的数据库中创建了一个表。最初是用旧的DB数据填充的。该表的PK必须接收那些记录上已经存在的值,因此它不能是自动递增的。 现在,我需要新表将其PK作为自动增量。但是,在PK已经存在并且有数据之后,我该怎么办?



1
SQL Server多对一复制
我有8台单独的SQL Server 2008 R2计算机,每台托管1个数据库。每个数据库都有相同的表结构和架构,以及完全唯一的数据。 我想建立一个报表服务器(可能是2008或2012),它将来自8个源服务器的选定表中的行合并到报表服务器上那些表的单个实例中。这是单向复制(不会对报告服务器进行任何更改)。我将需要以相对较低的延迟(例如20-30秒)从源数据库复制更改。 此外,我想找到一种方法来实现这一目标,并且对源服务器的影响尽可能小。在我的环境中,那些服务器的第三方代理,触发器或架构模块很困难。 我的问题: 有哪些有希望的架构和技术可以实现这一目标? 我看过SQL Server合并复制,但是我担心延迟。这是实现此目标的合适技术吗? 是否有用于事务复制的多对一体系结构? 我应该查看报表服务器上8个数据库的1对1复制,然后进行一些自定义合并功能(两步复制)吗? 谢谢,约翰

5
强制SQL Server按照编写的条件运行查询条件?
我正在使用SQL Server 2008 R2,并且具有以下伪查询(SP): select ... from ... WHERE @LinkMode IS NULL AND (myColumn IN (...very long-running query...)) ... ... 问题是查询要花很长时间才能执行-即使我使用来执行SP @LinkMode=2。 正如您所注意到的,只有在@LinkMode为null时才应执行长时间运行的查询,在这种情况下不是这样。在我的情况下,@LinkMode = 2! 但是,如果我将其更改为: select ... from ... WHERE 1=2 AND (myColumn IN (...very long time exeted query...)) ... ... SP 确实运行很快。 我之前听说过,有时优化器可以优化条件的顺序。 所以我问: 即使优化器选择了其他路径,比检查if更快=null呢?我的意思是,我认为检查if a==null是多比正在运行的其他长的查询速度更快... 如何强制 SQL …




5
TRY-CATCH未捕获链接的服务器错误
我正在设置一项工作,以遍历链接服务器的列表并针对每个服务器执行特定的查询。我正在尝试在TRY-CATCH块中执行查询,因此如果一台特定服务器存在问题,我可以将其记录下来,然后继续使用其他服务器。 我在循环内执行的查询如下所示: BEGIN TRY SELECT * FROM OPENQUERY([server1], 'SELECT 1 AS c;'); END TRY BEGIN CATCH SELECT ERROR_NUMBER(), ERROR_MESSAGE(); END CATCH; PRINT 'We got past the Catch block!'; 如果连接到服务器有问题,则代码立即会立即失败,并且不会传输到CATCH块中。如果服务器连接但实际查询中存在错误(例如,除以零),则该错误将被该CATCH块捕获。 例如,我创建了一个链接服务器,其名称不存在。执行上面的代码时,我得到: OLE DB provider "SQLNCLI" for linked server "nonserver" returned message "Login timeout expired". OLE DB provider "SQLNCLI" for linked server …

1
授予从系统表中选择的权限
我有一个数据库Microsoft SQL Server 2008 r2。定义了一个名为marie的用户,该用户可以访问主数据库上的表。这很好。现在,我希望marie能够执行以下查询: SELECT resource_type,spid,login_time,status,hostname,program_name,nt_domain,nt_username,loginame FROM sys.dm_tran_locks dl JOIN sys.sysprocesses sp on dl.request_session_id = sp.spid 涉及的表是主表;如何授予玛丽向他们阅读的权限?我已经尝试过以dbo执行以下命令: GRANT ALL on sys.dm_tran_locks TO marie GRANT ALL on sys.sysprocesses TO marie 不过,当玛丽尝试执行上述查询时,错误是: Msg 297, Level 16, State 1, Line 1 The user does not have permission to perform this action. 我究竟做错了什么?
14 sql-server 

1
将主键移到文件组(SQL Server 2012)
如何将群集的主键移动到新文件组?我已经找到了可能的“算法”,但是效率很低: 删除非集群索引(要求对它们进行重新排序和重建) 删除聚簇索引(要求使用整个表) 创建新的主键约束(巨大的排序操作) 创建所有非聚集索引(需要排序和写入) 有没有更有效的方法?这是非常低效的,并且由于弱服务器上的表大小为50GB,将花费很长时间。 是否没有办法跳过所有这些,只对新文件组进行重建?那将不需要任何数据排序。

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.