我有关于TRY CATCH块的MSDN文档的问题.查看本文并向下滚动到示例C"使用TRY ... CATCH与XACT_STATE"
http://msdn.microsoft.com/en-us/library/ms175976.aspx
该示例首先COMMIT TRANSACTION在Try块中放置一个,然后在Catch块中放置第二个if XACT_STATE()=1.
但是我认为Catch块只会在发生错误时执行.那么Catch块如何执行并XACT_STATE返回1?这似乎是矛盾的.
XACT_STATE文档中有一条未回答的评论,询问同一个问题
我有一个表,最多可以有5行,最少1行.现在我需要将这些行存储在不同的变量中@v1,@v2,@v3,@v4,@v5.我该怎么做?
该表只有1列custid.
CustId
100
200
300
400
Run Code Online (Sandbox Code Playgroud)
如果表只包含1行,那么@v1应该有该值,其余的可以null.
我想创建一个名为的表tbl_Ticket_Mail_Address.创建表时显示错误.
表:
CREATE TABLE [dbo].[tbl_Ticket_Mail_Address] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Designation] NVARCHAR (MAX) NULL,
[Emp_ID] NVARCHAR (MAX) NOT NULL,
[Emp_Name] NVARCHAR (MAX) NULL,
[Mobile] NVARCHAR (MAX) NULL,
[Emp_Email] NVARCHAR (MAX) NULL,
[Category] NVARCHAR (MAX) NULL,
[Created_By] NVARCHAR (MAX) NULL,
[Created_Date] DATE NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [uc_tbl_Ticket_Mail_Address] UNIQUE NONCLUSTERED ([Emp_ID] ASC, [Category] ASC)
);
Run Code Online (Sandbox Code Playgroud)
58,1):SQL72014:.Net SqlClient数据提供程序:消息1919,级别16,状态1,行1列'tbl_Ticket_Mail_Address'中的列'Emp_ID'属于无法用作索引中的键列的类型.(57,5):SQL72045:脚本执行错误.执行的脚本:
CREATE TABLE [dbo].[tbl_Ticket_Mail_Address] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Designation] NVARCHAR (MAX) NULL,
[Emp_ID] NVARCHAR …Run Code Online (Sandbox Code Playgroud) 我有一张Table1关于SQL Server 2014和MySQL 的表.
Table1
ID INT,Code VARCHAR(100)
Run Code Online (Sandbox Code Playgroud)
我MyLinkedServer使用"Microsoft OLEDB Provider for ODBC"在SQL Server中创建了一个链接服务器.
**链接服务器**
EXEC master.dbo.sp_addlinkedserver @server = N'MyLinkedServer', @srvproduct=N'MyLinkedServer', @provider=N'MSDASQL', @datasrc=N'MyLinkedServer'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MyLinkedServer',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='########'
Run Code Online (Sandbox Code Playgroud)
链接服务器设置
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'remote proc transaction promotion', @optvalue=N'true'
Run Code Online (Sandbox Code Playgroud)
链接服务器已成功创建,我可以在SQL Server中查询Mysql表.
询问
我跑的时候
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
Run Code Online (Sandbox Code Playgroud)
记录已插入.但是,当我启动一个事务并运行时INSERT,我收到一个错误:
BEGIN TRAN
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
COMMIT
Run Code Online (Sandbox Code Playgroud)
错误:
链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"返回消息"[MySQL] [ODBC 5.3(a)驱动程序]不支持可选功能".消息7391,级别16,状态2,行8无法执行操作,因为链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"无法启动分布式事务.
到目前为止我尝试过的.
在MSDTC中启用XA事务 …
我需要在SQL Server 2008中生成一个3个字符的字母数字序列,如下所示:
001,
002,
...,
999,
A01,
A02,
...,
A99,
B01,
B02,
...,
Z99
Run Code Online (Sandbox Code Playgroud)
序列中的下一项将从存储过程生成并存储在NCHAR(3)表列中.
我无法替换特殊字符.你能帮帮我吗?
我的意见是:
Mrs?Montero
Run Code Online (Sandbox Code Playgroud)
输出应该是:
Mrs Montero
Run Code Online (Sandbox Code Playgroud)
特殊字符未正确显示.请看下面的图片.

我需要将一个数据库的属性 datetime2 与其他数据库的属性 datetime 进行比较,因为我找不到将 datetime 转换为 datetime2 的方法。
我测试一下这句话:
select CAST(FechaAlta AS datetime) from tutors
Run Code Online (Sandbox Code Playgroud)
但返回此错误消息:
将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。
我的数据中有一个日期字段
"type": "date",
"format": "dateOptionalTime"
Run Code Online (Sandbox Code Playgroud)
现在我的日期字段和值是 -
"INITIAL_EXTRACT_DATE" : "2015-04-02T06:47:57.78+05:30"
Run Code Online (Sandbox Code Playgroud)
在搜索时我只根据"2015-04-02"的日期进行搜索.但我得到0结果.
任何人都可以建议如何搜索确切的日期,是任何日期.
现在我正在尝试这个 -
确切日期 -
"term": {
"IH_PT_DSC": {
"value": "2015-04-02"
}
}
Run Code Online (Sandbox Code Playgroud)
对于任何日期 -
"terms": {
"IH_PT_DSC": [
"2015-04-02",
"2015-04-03",
"2015-04-03"
]
}
Run Code Online (Sandbox Code Playgroud) 我在SQL Server 2005数据库中有一个包含以下字段的表:
id, integervalue, stringcreate_date, datetime新数据不断被插入到此表中(每天数万条记录),因此我使用以下查询来比较在不同日期插入的数据量.
SELECT CONVERT(varchar(10), create_date, 101) as 'Date', COUNT(*) as 'Record Count',
FROM the_table
GROUP BY CONVERT(varchar(10), create_date, 101)
ORDER BY 'Date' desc
Run Code Online (Sandbox Code Playgroud)
此查询返回如下所示的数据:
12/20/2012 | 48155
12/19/2012 | 87561
12/18/2012 | 71467
Run Code Online (Sandbox Code Playgroud)
但是,在今天运行此查询时,我注意到排序无法按预期工作,数据库中有多年的数据.而不是今年的数据位于结果集的最顶端,它最终位于底部(为清晰起见省略了记录)
06/29/2012 | 9987
01/04/2013 | 15768
01/03/2013 | 77586
01/02/2013 | 23566
Run Code Online (Sandbox Code Playgroud)
我理解为什么会发生这种情况,因为我的格式化日期只是一个字符串,并且不能指望sql server将它排序为除字符串之外的任何东西.但我希望订购准确.我怎样才能做到这一点?(最近一天总是出现在第一天)
编辑:重新提出整个问题.第一次带错了方向.
该结果应该是这样的:
MachineName | OrderNo | TaskID | Code | NettoProd | BrutoProd | DiffProd
=========================================================================
F1 123456 101 O 100000 125000 25000
F1 123456 102 P8 1000000 1250000 250000
F1 123456 103 P1 10000 12500 2500
F1 123456 104 P4 100000 125000 25000
Run Code Online (Sandbox Code Playgroud)
在JobSummary下面几列:
StartDate
TaskID
Run Code Online (Sandbox Code Playgroud)
在Route下面几列:
OrderNo
TaskID
Run Code Online (Sandbox Code Playgroud)
在Resource保存有关的机器数据
MachineID
Run Code Online (Sandbox Code Playgroud)
如果我首先提供了所有细节,我已经添加了Kyle Gobel的部分,这是正确的答案.
我想要完成的是显示O何时它是第一个taskID链接到一个任务的任务,OrderNo基于该表StartDate,这是DateTime表中的一个字段.
如果这是不可能的同时检查Route.No和JobSummary.StarDate在一个CASE声明中,则两个单独的列会做太多. …