Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

5
附加/分离与备份/还原
我需要将数据库(作为一个整体)传输到另一台服务器,以创建一个重复的数据库来设置另一个测试环境。 我有两个选择: 在源服务器上进行完整备份/在目标服务器上进行还原; 在源服务器上分离/在目标服务器上附加。 根据我的要求,两种解决方案的优缺点是什么? 我正在使用SQL Server 2008 Enterprise。

2
SQL Server可以在系统生成的约束名称中创建冲突吗?
我有一个可以在SQL Server 2008数据库(非群集)中创建数百万张表的应用程序。我希望升级到SQL Server 2014(群集),但在负载下却遇到错误消息: “数据库中已经存在一个名为'PK__tablenameprefix__179E2ED8F259C33B'的对象” 这是系统生成的约束名称。它看起来像是随机生成的64位数字。由于表格数量众多,我是否有可能看到冲突?假设我有1亿张表,那么在添加下一张表时,我计算出发生冲突的机会要小于1万亿分之一,但这假设分布是一致的。SQL Server是否有可能在2008年和2014年之间更改其名称生成算法以增加发生冲突的可能性? 另一个明显的不同是,我的2014年实例是一个成对的,但是我正在努力形成一个假设,说明为什么会产生上述错误。 PS:是的,我知道创建数百万张表很疯狂。这是我无法控制的黑匣子第三方代码。尽管有精神错乱,但它在2008版中仍然有效,现在在2014版中不再适用。 编辑:仔细检查后,生成的后缀似乎总是以179E2ED8开头-这意味着随机部分实际上只是一个32位数字,每次添加新表时,冲突几率仅为50分之一。与我看到的错误率更接近!


1
UPSERT-MERGE或@@ rowcount是否有更好的替代方法?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我想知道您是否遇到过类似于UPSERT概念的T-SQL命令?使用选项(1)或(2)执行INSERT | UPDATE操作似乎过于复杂且容易出错。 目的 为了确保所需的记录(在本例中为employee_id 1)是最新的,而不必本质上两次写入相同的查询。 语境 表名:员工 员工编号:具有主键,并且身份属性设置为true 选项 执行SQL UPDATE ...检查@@ rowcount = 0和@@ error = 0 ...根据需要执行SQL INSERT 缺点:您实际上必须两次编写相同的查询,一次作为插入,一次作为更新 缺点:更多的代码=更多的输入时间 缺点:更多代码=更多错误空间 /programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure “使用@@ rowcount更新” 执行一个SQL MERGE 缺点:您实际上必须两次编写相同的查询,一次作为插入,一次作为更新 缺点:更多的代码=更多的输入时间 缺点:更多代码=更多错误空间 http://technet.microsoft.com/zh-cn/library/bb510625.aspx “ T-SQL合并” 执行SQL UPSERT(功能不存在) 专家:您一次定义了数据与表的关系(让SQL Server担心它是INSERT还是UPDATE) 优点:更少的代码=更快的实现 优点:更少的代码=更低的概率 UPSERT示例 UPSERT雇员(employee_id,employee_number,job_title,first_name,middle_name,sname,modified_at)VALUES(1,'00 -124AB37','Manager','John','T','Smith',GetDate()); 如果employee_id 1不存在:MS SQL执行INSERT语句 …

3
并行统计更新
在SQL Server 2008或更高版本中,是UPDATE STATISTICS WITH FULLSCAN单线程操作还是可以使用并行性?如何使用默认采样更新统计信息-它可以使用并行性吗?我没有看到指定MAXDOP更新统计信息的选项。

2
如何添加有权访问单个视图的用户?
我正在使用MSSQL Server Management Studio 2008,并且需要向第三方公开其数据协调的视图。我已经创建了适当的视图,但是在创建用户和授予该用户适当的权限以从视图中选择时遇到了麻烦。 我遵循了用于创建登录名和用户的向导,然后在“安全性”部分中添加了我的视图,并选中了“授予”框。一切似乎都很好,但是当我以该用户身份登录并尝试执行“从MyViewName中选择*”时,它告诉我选择权限被拒绝。 我只是重新创建了用户(这次只是使用SQL而不是向导),并明确授予了选择权限,现在它给了我错误:(Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.我不知道为什么它试图访问不相关的数据库...) 我真的不知道从这里去哪里。同样,基本上,我所需要做的就是创建一个我可以提供给第三方的用户,以使他们连接到我们的数据库并从该视图中进行选择。

5
什么是可视化SQL Agent作业的好工具?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 我发现用于管理代理作业的内置MS SQL Studio工具有些令人沮丧。您发现哪些工具有用? 副手,我想在这种工具中看到三件事: 有关哪些作业何时运行,持续多长时间以及是否成功的图形摘要。 当前状态视图,如“作业活动监视器”,但几乎实时刷新。 用于复制或修改作业的更方便的界面(例如,比较两个作业步骤而不会被模态对话框阻止)。 编写一个小应用程序来处理此问题可能很简单,但是肯定有人已经做到了,并且做得更好。 这显然是一个主观的问题,因此,如果某种mod徘徊不前,请随时将其设为CW。

2
SQL Server VARCHAR列宽
在网上搜索时,我发现在指定超宽VARCHAR列(例如VARCHAR(30)可能会这样做时,例如VARCHAR(255))时是否会对性能产生影响的建议相互冲突。 我始终认为,如果整行超过8060字节,则会对性能造成影响。除此之外,我看到了分歧。 要求是真的The default is SET ANSI PADDING ON = potential for lots of trailing spaces吗?只要总行宽小于8060,在VARCHAR列过大设置时是否存在真正的性能问题? 列宽很重要的证据 The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need. http://www.sql-server-performance.com/2007/datatypes/ Length is a constraint on the data (like CHECK, FK, NULL etc) Performance …

5
使用多个数据库与使用单个数据库的利弊
我正在一个新项目中工作,该项目要求使用7个数据库,并认为更容易实现性能,稳定性和优化。 虽然我不同意,但我在收集好的参数以使用单个数据库时遇到了麻烦(将表拆分为逻辑域)。 到目前为止,我有一个论点是数据完整性(我不能在数据库之间使用外键)。 使用单个或多个数据库有哪些优点/缺点? [到目前为止的总结] 针对多个数据库的参数: 丢失数据完整性(不能在数据库上使用外键) 失去还原完整性 获得复杂性(数据库用户/角色) 小赔率服务器/数据库将关闭 解决方案: 使用架构来分隔域。 POC:使用伪数据证明7/1 db执行计划中的重点

2
我应该在添加主键之前还是之后添加页面级压缩?
情况 Sql Server 2008 Enterprise上的数据仓库 36+百万行堆(不要问),具有60+列 每月增加750k 未定义主键(我现在已经确定了一个) 无压缩 我正在考虑做的事情(按此顺序) 添加页面级压缩 添加PK 添加许多非聚集索引 尽快这样做 题 最终:我要先添加PK还是页面压缩?(有关系吗?) 如果我先将压缩添加到表,那么任何索引都将继承表级压缩设置吗?dba.stackexchange上的此问题的答案是“否,压缩不继承”。 我目前偏向的目标 -- Add page level compression alter table dbo.TableName rebuild with (data_compression = page) ; go -- Add primary key alter table dbo.TableName add constraint PK_TableName primary key clustered (<Columns>) ; go -- …


1
SET NOCOUNT升级后处理SQL调用时出错
我们正在使用新服务器和Microsoft SQL Server的更新版本升级测试环境,但遇到了问题。 在新服务器上,执行某些存储过程时,我们的旧代码将获得“关闭对象时不允许操作”。该消息从未出现在旧服务器上。当我们对其进行跟踪时,可以通过添加SET NOCOUNT ON;到存储过程中来解决该问题。 我查看了数据库的默认设置,没有发现与默认设置相关的其他设置(SQL Server 2008与SQL Server 2014)。 我应该在什么条件下解决全局问题,而无需增加SET NOCOUNT ON一千个存储过程?

4
当XACT_ABORT设置为ON时,在什么情况下可以从CATCH块内部提交事务?
我一直在阅读有关TRY...CATCH和的MSDN XACT_STATE。 它具有以下示例,该示例XACT_STATE在构造CATCH块中TRY…CATCH用于确定是提交还是回退事务: USE AdventureWorks2012; GO -- SET XACT_ABORT ON will render the transaction uncommittable -- when the constraint violation occurs. SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; -- A FOREIGN KEY constraint exists on this table. This -- statement will generate a constraint violation error. DELETE FROM Production.Product WHERE …

3
我可以创建用户定义的表类型并在同一事务中使用它吗?
当我执行以下命令时(在Management Studio中,GO会将命令分成批处理) use tempdb begin tran go CREATE TYPE dbo.IntIntSet AS TABLE( Value0 Int NOT NULL, Value1 Int NOT NULL ) go declare @myPK dbo.IntIntSet; go rollback 我收到死锁错误消息。我的过程已经陷入僵局。我已经在2008、2008R2和2012中看到了这种行为。 有没有办法在创建的同一笔交易中使用我新创建的类型?

3
有没有一种方法可以确定SQL Server查询是在内存中运行还是在磁盘上运行?
今天,我在一个应用程序中遇到了一组存储过程,这些存储过程在长时间运行的过程中被重复调用。在每个过程中,我发现了多个不同的select语句,其中一些在循环内。毫不奇怪,当前使用的这些例程需要几分钟才能运行,而直觉会期望它们在几秒钟内完成。 似乎很明显,编写这些过程时并未考虑性能,因为有很多事例只是“一个不好的主意”。 导入数据时处理每一行需要花费300毫秒,因此处理相对较小的导入需要花费几分钟。 但是,过程中涉及的表大部分很小。我在想,如果所有这些表都完全驻留在内存中,那么重写任何这些表可能并没有获得太多。 我正在尝试确定....对于这个显然效率低下的代码,它有多少实际影响?值得修复吗? 所以问题是: -有没有办法确定哪些表完全固定在内存中? -是否有一种方法可以打开跟踪以监视嵌套的存储过程以查找特别昂贵的部分? 注意:这是在SQL Server 2008 R2上

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.