标签: sql-server

如何在sql server中重新抛出相同的异常

我想在我的try块中出现的sql server中重新抛出相同的异常.我可以抛出相同的消息,但我想抛出相同的错误.

BEGIN TRANSACTION
    BEGIN TRY
            INSERT INTO Tags.tblDomain 
            (DomainName, SubDomainId, DomainCode, Description)
            VALUES(@DomainName, @SubDomainId, @DomainCode, @Description)
            COMMIT TRANSACTION
    END TRY

    BEGIN CATCH
            declare @severity int; 
            declare @state int;

            select @severity=error_severity(), @state=error_state();

            RAISERROR(@@Error,@ErrorSeverity,@state);
            ROLLBACK TRANSACTION
    END CATCH
Run Code Online (Sandbox Code Playgroud)

RAISERROR(@@Error, @ErrorSeverity, @state);

这一行会显示错误,但我希望功能类似.这会引发错误,错误编号为50000,但我想要抛出错误的数字,我正在通过@@error,

我想在前端捕获此错误

catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Run Code Online (Sandbox Code Playgroud)

我想要这个功能.使用raiseerror无法实现.我不想在后端给出自定义错误消息.

当我通过ErrorNo抛出catch时,RAISEERROR应该返回下面提到的错误

Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Run Code Online (Sandbox Code Playgroud)

第14行违反UNIQUE KEY约束'UK_DomainCode'.无法在对象'Tags.tblDomain'中插入重复键.该语句已终止.

编辑:

如果我希望在前端处理异常,考虑到存储过程包含需要执行的多个查询,那么不使用try catch块的缺点是什么?

sql t-sql database sql-server exception-handling

79
推荐指数
4
解决办法
4万
查看次数

仅使用一个IDENTITY列将行插入表中

我有一个表管理员,只有一列,adminId是主键.由于业务规则,它必须是这样的.

我想一劳永逸地理解如何编写在这样的表中插入值的存储过程.我正在使用SQL Server和T-SQL并尝试使用SCOPE_IDENTITY(),但这不起作用,因为该表具有INSERT_IDENTITY为false或off.

我真的不想插入一个虚拟值只是为了能够插入一个新行.谢谢!

sql t-sql sql-server stored-procedures

79
推荐指数
1
解决办法
6万
查看次数

用于添加默认约束的命令

似乎至少有两种方法可以使用直接T-SQL添加默认约束.我是否正确,下面两者之间的唯一区别是第二种方法专门为约束创建一个名称,第一种方法有一个由SQL Server生成?

ALTER TABLE [Common].[PropertySetting] ADD DEFAULT ((1)) FOR [Active];
ALTER TABLE [Common].[PropertySetting] ADD CONSTRAINT [DF_PropertySetting_Active) DEFAULT ((1)) FOR [Active];
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server default-constraint

79
推荐指数
1
解决办法
5万
查看次数

简单的DateTime sql查询

如何在一定范围内查询DateTime数据库字段?

我正在使用SQL SERVER 2005

错误代码如下

SELECT * 
  FROM TABLENAME 
 WHERE DateTime >= 12/04/2011 12:00:00 AM 
   AND DateTime <= 25/05/2011 3:53:04 AM
Run Code Online (Sandbox Code Playgroud)

请注意,我需要在特定时间范围内获取行.例如,10分钟的时间范围.

目前SQL返回"12"附近的语法不正确."

sql t-sql sql-server sql-server-2005 sql-server-2008

79
推荐指数
4
解决办法
44万
查看次数

如何在sql server中查询查询中的文本?

以下SQL:

SELECT notes + 'SomeText'
FROM NotesTable a 
Run Code Online (Sandbox Code Playgroud)

给出错误:

数据类型nvarchar和text在add运算符中不兼容.

sql sql-server

78
推荐指数
5
解决办法
28万
查看次数

78
推荐指数
7
解决办法
19万
查看次数

MySQL与SQL Server与Oracle的对比

我一直只使用MySQL,没有其他数据库系统.

在今天的公司会议上提出了一个问题,我很尴尬,我不知道:对于开发人员来说,MS或Oracle提供的功能是什么,MySQL缺少哪些功能,哪些允许MS和Oracle为他们的系统收费?

mysql sql-server oracle

78
推荐指数
7
解决办法
9万
查看次数

MS SQL比较日期?

我有2个日期(日期时间):

date1 = 2010-12-31 15:13:48.593
date2 = 2010-12-31 00:00:00.000

它在同一天,只是不同的时间.比较date1和date2使用<=因为date1时间而无效.所以date1 <= date2是错误的,但应该是真的.我可以通过查看年,月和日来比较它们,以便它们是相同的吗?它的SQL Server 2008.

谢谢 :)

t-sql sql-server date sql-server-2008

78
推荐指数
2
解决办法
19万
查看次数

使用SQL Server在CREATE TABLE语句中创建非聚簇非唯一索引

可以在SQL Server CREATE TABLE语句中创建主键或唯一索引.是否可以在CREATE TABLE语句中创建非唯一索引?

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- Is it possible to create a non-unique index on columns d and e here?
    -- Note: these variations would not …
Run Code Online (Sandbox Code Playgroud)

sql-server

78
推荐指数
4
解决办法
12万
查看次数

如何从T-SQL获取当前实例名称

如何使用T-SQL脚本获取当前连接的SQL Server服务器和实例名称?

sql t-sql sql-server sql-server-2008r2-express

78
推荐指数
5
解决办法
18万
查看次数