Questions tagged «sql-server-2012»

SQL Server 2012(主要版本11.00.xxxx)。还请标记sql-server。

2
存储过程中的事务
我需要在单个事务中执行UPDATE和INSERT。该代码本身可以正常工作,但是我希望能够轻松地调用它并传递所需的参数。当我尝试将此事务嵌套在存储过程中时,我遇到许多语法错误。 如何封装以下代码,以便可以轻松调用它? BEGIN TRANSACTION AssignUserToTicket GO DECLARE @updateAuthor varchar(100) DECLARE @assignedUser varchar(100) DECLARE @ticketID bigint SET @updateAuthor = 'user1' SET @assignedUser = 'user2' SET @ticketID = 123456 UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID); INSERT INTO [dbo].[tblTicketUpdate] ([ticketID] ,[updateDetail] ,[updateDateTime] ,[userSamAccountName] ,[activity]) VALUES (@ticketID, 'Assigned ticket to …


2
在数据集市/仓库中处理时区
我们正在开始设计数据集市/仓库的构建基块,我们需要能够支持所有时区(我们的客户来自世界各地)。从在线(和在书中)阅读讨论中,一个常见的解决方案似乎是在事实表中具有单独的日期和时间维度以及时间戳。 但是,我很难回答的问题是,考虑到我的动态时区要求,日期和时间维度实际上对我有什么好处?时间维度更有意义,但我在日期维度方面遇到了麻烦。日期维度的一般设计方法通常包括属性,例如天名称,星期几,月名称等。我所遇到的问题是,2013年12月31日(星期二)UTC的11:00 PM是星期三,2014年1月1日,位于UTC + 2之后的所有时区。 因此,如果我将不得不对每个查询(和报告)进行所有这些时区转换,那么拥有和存储我可能永远不会使用的这些属性(看起来像)有什么意义呢?有人建议在每个时区都有事实行,但这对我来说似乎很荒谬。我们需要每月能够存储数百万条记录。 其他人则建议有一个时区桥接表,尽管这在一定程度上是有意义的,但似乎也很复杂,需要进行额外的连接才能完成我的客户端应用程序和报告应该可以从某个日期轻松确定的事情(报告主要基于网络)那里有许多库可帮助您转换,显示和格式化日期)。 我唯一能想到的是按日期和小时分组的简便性和可能的​​性能,但实践的糟糕之处在于按日期部分分组(我们正在使用MS SQL,但我们将查询数百万行)或我们应该考虑只是非常简单的日期和时间维度,而在大多数情况下,如星期一之类的大多数文字,时,日,月和年的数字最多不超过几小时,那么在时区发挥作用时就没有多大意义了?

8
无法使用我的Windows帐户启动SqlLocalDB实例
我是管理员,只需运行以下命令: sqllocaldb start v11.0 结果: Start of LocalDB instance "v11.0" failed because of the following error: Error occurred during LocalDB instance startup: SQL Server process failed to sta rt. 事件查看器日志事件ID:528 Windows API调用WaitForMultipleObjects返回了错误代码:575。Windows系统错误消息是:{Application Error}应用程序无法正确启动(0x%lx)。单击“确定”关闭该应用程序。报告在线:3621。 我尝试了另一个(用户和管理员)帐户,它们没有问题。 我卸载并重新安装了SQLLocalDB.msi 2012版本,但没有运气。您有任何想法和解决方法吗?



4
列出作业,计划和下一个计划的运行日期时间
列出作业,计划和下一个计划的运行日期时间 我正在尝试列出作业,计划和下一个计划的运行日期时间。但是,我似乎没有成功。 sysjobactivity 有next_scheduled_run_date,这是我需要的,但是我不知道将其连接到Job和Schedule。 如果还有其他方法sysjobactivity,请引导我到那里。 SELECT sj.name AS jobName , ss.name AS scheduleName , sja.next_scheduled_run_date FROM msdb.dbo.sysjobs sj INNER JOIN msdb.dbo.sysjobactivity sja ON sja.job_id = sj.job_id INNER JOIN msdb.dbo.sysjobschedules sjs ON sjs.job_id = sja.job_id INNER JOIN msdb.dbo.sysschedules ss ON ss.schedule_id = sjs.schedule_id WHERE (sj.name LIKE 'xray%') AND (sja.next_scheduled_run_date > GETDATE())

3
长时间在MSSQL中打开事务会产生什么影响?
我只是想知道如果您在数据库中开始事务并忘记提交或回滚该怎么办。服务器会停机吗?可以说您离开了3天。 还有一些正在使用它的用户,假设其他用户不知道有未完成的事务(假设用户只是在数据库中插入数据)。此操作的后果是什么?

2
MAXDOP = 1,并行查询提示和成本阈值
如果实例MAXDOP设置为1,并且查询提示用于允许特定查询并行进行,那么SQL仍然使用“并行成本阈值”来决定是否实际并行吗? 尽管此链接建议CTFP如果MAXDOP为1 ,则将其忽略。尽管有任何查询,无论成本如何,在没有查询提示的情况下,当MAXDOP值为1 时,它都将并行进行。 谁能让我知道这两个请求的预期行为? 范例1: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 30 范例2: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 70

5
如何将case语句中的100个以上的条目作为变量
我编写了一个包含100多个选择的case语句,在一个简单的查询中,我在4个地方使用同一条语句。 相同的查询两次,并且它们之间有一个并集,但也进行计数,因此group by还包含case语句。 这是为了重新标记某些公司名称,其中同一公司的不同记录的拼写不同。 我试图将变量声明为VarChar(MAX) declare @CaseForAccountConsolidation varchar(max) SET @CaseForAccountConsolidation = 'CASE WHEN ac.accountName like ''AIR NEW Z%'' THEN ''AIR NEW ZEALAND'' WHEN ac.accountName LIKE ''AIR BP%'' THEN ''AIR BP'' WHEN ac.accountName LIKE ''ADDICTION ADVICE%'' THEN ''ADDICTION ADVICE'' WHEN ac.accountName LIKE ''AIA%'' THEN ''AIA'' ... 当我在select语句中使用它时-查询仅将case语句返回为文本,并且未对其进行评估。 我也无法在群组中使用它-我收到此错误消息: Each GROUP BY …

3
是否可以根据SQL Server版本选择RAISERROR或THROW?
现在是我的代码: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH 除非它在装有SQL 2008的计算机上运行,​​否则效果很好。我想让CATCH块对SQL版本进行检查,如果THROW等于或高于2012,则运行THROW,如果它等于或高于2012,则运行RAISERROR。语法错误,我想知道是否有可能。即使像这样简单的事情也对我不起作用。 BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH 任何建议表示赞赏。

1
检查约束以强制执行###。###。####模式匹配
我希望有一个检查约束,可以对多部分代码强制执行此正则表达式模式: ^\d{3}\.\d{3}\.\d{4}$ ...三个数字,一个句号,三个数字,一个句号,四个数字 我是否需要创建CLR函数来实施模式匹配,并且可以在DDL中引用CLR函数吗? 有没有一种方法可以使用另一种方式来实施模式LIKE?

4
可以参与SET操作的最大局部变量数是多少?
我有一个包含业务逻辑的存储过程。在它里面,我有大约1609个变量(不要问我为什么,这就是引擎的工作原理)。我尝试将SET一个变量转换为所有其他变量的串联值。结果是在创建过程中出现错误: 消息8631,级别17,状态1,过程XXX,行YYY内部错误:已达到服务器堆栈限制。请在查询中寻找潜在的深层嵌套,并尝试简化它。 我发现该错误是由于我需要在SET操作中使用的变量数量引起的。我可以将作业一分为二来执行。 我的问题是这方面有限制吗?我检查了一下,但是没有找到。 我们检查了此KB中描述的错误,但这不是我们的情况。我们CASE在代码内不使用任何表达式。我们使用该临时变量准备必须使用CLR函数替换的值的列表。我们将SQL Server更新为SP3 CU6(最新),但是仍然遇到该错误。

1
SQL Server存储过程命名
我们已经开始将存储过程命名为[16_TestStoredProc]。命名这样的存储过程有什么含义吗? 我不会解释为什么我们要这样做。我不是对此有任何疑问,但可能有任何影响。

1
作业未按计划运行
因此,我有一个基本的SQL代理作业,该作业运行Robocopy脚本将所有文件从一个文件夹移动到另一个文件夹。 Job是一个非常基本的设置。 有相当基本的时间表。 但它尚未运行。我不是说成功跑步,也不是说完全跑步。有什么可能的原因吗? 有关其他信息,我还将对工作进行脚本编制。 USE [msdb] GO /****** Object: Job [MoveMantisFilesToArchive] Script Date: 12/23/2015 10:21:52 AM ******/ BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 /****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 12/23/2015 10:21:52 AM ******/ IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1) …

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.