我想在我的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应该返回下面提到的错误
Run Code Online (Sandbox Code Playgroud)Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,第14行违反UNIQUE KEY约束'UK_DomainCode'.无法在对象'Tags.tblDomain'中插入重复键.该语句已终止.
编辑:
如果我希望在前端处理异常,考虑到存储过程包含需要执行的多个查询,那么不使用try catch块的缺点是什么?
当我尝试在游标循环中运行以下SQL代码段时,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Run Code Online (Sandbox Code Playgroud)
我收到以下消息,
消息15248,级别11,状态1,过程sp_rename,行213
参数@objname不明确或声明@objtype(COLUMN)错误.
有什么问题,我该如何解决?我尝试用括号括起列名[],并""像一些建议的搜索结果一样加双引号.
编辑1 -
这是整个脚本.如何将表名传递给重命名sp?我不知道如何做到这一点,因为列名在许多表之一.
BEGIN TRANSACTION
declare @cnt int
declare @test nvarchar(128)
declare @cmd nvarchar(500)
declare Tests cursor for
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%'
open Tests
fetch next from Tests into @test
while @@fetch_status = 0
BEGIN
set @cmd = N'exec sp_rename ' + @test …Run Code Online (Sandbox Code Playgroud) 什么相当于SQL Server中的Oracle RowID?
我有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.
谢谢 :)
SQL Server 2012 Sequence作为新功能引入,与Oracle和Postgres相同.哪个序列优于身份?为什么我们需要序列?
如何使用T-SQL脚本获取当前连接的SQL Server服务器和实例名称?
我需要更新列的值,并在现有值上执行子字符串替换.
例:
数据包括abc@domain1,pqr@domain2等等.
我需要更新@domain2替换为的值@domain1.
我在两个不同的数据库中有两个表.在table1中(在database1中)有一个名为column1的列,它是一个主键.现在在table2(在database2中)有一个名为column2的列,我想将它添加为外键.
我试图添加它,它给了我以下错误:
消息1763,级别16,状态0,行1
不支持跨数据库外键引用.外键Database2.table2.消息1750,级别16,状态0,行1
无法创建约束.查看以前的错误.
我是如何做到这一点的,因为表位于不同的数据库中.
我在SQL Server 2008 R2数据库中收到以下错误:
不能在表或索引视图'tblArmy'上使用
CONTAINS或FREETEXT谓词,因为它不是全文索引的.
我正在尝试仅从varchar字段中获取最后四个字符.所有行都是不同的长度.我应该用什么功能来实现这个目标?
t-sql ×10
sql ×7
sql-server ×7
database ×1
date ×1
foreign-keys ×1
replace ×1
row-number ×1
rowid ×1
string ×1