我有一个接受5个参数的过程,它需要将描述设置为空字符串,设置添加到当前日期的日期(我使用GETDATE)。但是,我似乎无法工作的是,当输入负数时,我需要列表价格和折扣率来抛出错误。我的代码可以工作,但是当我尝试输入负数时,我的语句不会出现错误。
USE MyGuitarShop;
GO
IF OBJECT_ID('spInsertProduct') IS NOT NULL
DROP PROC spInsertProduct;
GO
CREATE PROC spInsertProduct
@insCatID int = 0,
@insProdCode varchar(10) =
使用接收供应商状态输入参数的存储过程。我试图在状态VARCHAR值长度超过2个字符时引发自定义错误。我使用LEN函数来计数参数长度,并比较传递给整数2的值。从逻辑上看,这看起来是正确的,但错误不会被抛出。有什么帮助吗?
USE AP
GO
CREATE PROC TEST123
@state VARCHAR(2) = NULL
AS
IF LEN(@state) <= 2
SELECT TOP 1 VendorName
FROM Vendors
WHERE VendorState = @state;
ELSE
THROW 50001, '
对于前缀为sp_的T存储过程,Server将在当前数据库之前搜索并使用主数据库中的一个过程。我用SQL Server 2010创建的SQLCLR存储过程(使用内置于deploy中的Visual Studio)似乎并非如此。数据库服务器是server 2008 R2 (SP1)。
我执行以下脚本:
SELECT name
from master.sys.procedures
WHERE type_desc='CLR_STORED_PROCEDURE' and schema_id = 1
USE tempdb
PRINT 'USING tempDb'
EXEC s
使用SQL Server 2012在客户站点上安装时出错。我能够在SQLExpress 2012上本地重现语法错误。同样的DDL脚本在2008年的R2下运行良好,但由于“‘44445’附近的语法不正确”而失败。
检查正在执行的SQL,文本'44445‘被注释掉。同样,这个SQL可以在2008 R2上运行。张贴的最后一行是语法侵犯者。注意,它被注释掉了,就像本例中的大部分内容一样。
[snipped]
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'Updatable' , N'USER
CREATE PROCEDURE [dbo].[DeleteUser]
-- Add the parameters for the stored procedure here
@original_UserID nvarchar(64) = UserID,
@temp int =0
AS
BEGIN
SELECT @temp = COUNT(*) FROM dbo.Users WHERE ManagerID = @original_UserID
END
BEGIN
IF(@temp>0)
RAISERROR ('This user is ma
我正在尝试执行以下代码:
THROW 51051, 'I come from the THROW construct :)', 1 ;
我得到的错误是:
Could not find stored procedure 'THROW'.
THROW过程不是系统过程吗?为什么找不到呢?
此外,取消THROW和ErrorState之间的区别是什么?一个比另一个旧/新/好吗?ErrorState中的"ErrorSeverity“和"ErrorState”是什么意思?我可以按照自己的意愿定义它们,还是可以预定义它们?
因此,当查询执行失败时,我的SSIS包将来自查询执行的消息记录为错误。例如,我的查询有两个Print语句,由于某种原因,查询由于一些错误而失败。SSIS记录所有2条打印语句以及实际错误。我不希望SSIS包将打印消息记录为错误。我的包正在阅读有关"OnError“事件处理程序的信息。日志的源设置为: System::ErrorDescription。考虑以下查询:
PRINT 'Trying to set string value to a datetime column.'
PRINT 'So i should get this error: Conversio
是否可以通过SQL打印命令在消息窗格输出中更改SQL Server Management Studio (SSMS)中使用的默认字体颜色(颜色)?
IF @@TRANCOUNT>0 BEGIN
PRINT 'The database update succeeded'
COMMIT TRANSACTION
END
ELSE PRINT 'The database update failed'
GO
I.e
我在这里做错了什么?
Declare @starttimestamp datetime = getdate();
RAISERROR(N'Code not valid until %s', 16, 1, CAST(@starttimestamp AS VARCHAR));
生成一个错误,显示Incorrect syntax near 'CAST'.和Incorrect syntax near '@starttimestamp'. Expecting SELECT or (
我在一个连接到序列容器的数据包中有一个sql任务。在sql任务中,我有以下内容:
BEGIN TRY
BEGIN TRAN
TRUNCATE TABLE foo_Copy
INSERT INTO foo_Copy
SELECT * FROM foo
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
问题是,当发生错误时,将执行"Rollback Tran“,并且sql server不会引发错误,因此sql任务不会引发错误,绿色连接将继续进行到下一个容器。在SSIS数据包中的sql任务中执行回滚时,创建故障或阻碍下
早上好,当我尝试删除1条记录时,当它存在的时候,我遇到了问题,但是当执行它时,它只显示了消息,但它没有删除它。
这是我在存储过程中执行的查询,其中参数是从可视化研究中生成的应用程序发送的。
if(@tipo=11)begin
--execute AUTONORT_UBICACION_PRODUCTOS 9,'001','001','A','01','F','004','04A'
BEGIN T
请参阅下面的TSQL:
alter PROCEDURE dbo.InnerStoredProcedure
AS
begin try
declare @result as int
set @result=1/0
end try
begin catch
print 'reached inner catch';
PRINT @@TRANCOUNT
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeve
我在SQL Server 2008中的存储过程如下所示:
create PROCEDURE [dbo].[test]
AS
BEGIN
print 'start'
waitfor delay '00:02:00'
print 'end'
END
GO
正如预期的那样,我希望在输出中获得:
start
然后2分钟后:
end
我应该改变什么?
大多数关于Server错误处理的在线讨论似乎都集中于如何优雅地处理T处理、使用抛出或TRY...CATCH等引发的错误。
我所拥有的是一个接受多个参数的存储过程。这些参数中有两个只能在某个范围内有值,因此在我的过程开始时,我希望检查从应用程序(ASP.NET)传递的值,如果它们不在可接受的范围内,则返回一个错误。
现在我有:
IF @RequesterType <> 2 AND @RequesterType <> 3
BEGIN
RAISERROR('The value for RequesterType must be either 2 (Client
我有一些过程需要在开始之前采取不同的步骤。例如:
禁用外键上的检查约束:
select 'alter table '+fk.table_schema+'.'+fk.table_name
+' NOCHECK CONSTRAINT '+fk.CONSTRAINT_NAME
from SAProduct.information_schema.table_constraints fk
join SAProduct.information_schema.tables t
on t.table_schema = fk.table_schema
and
当事务的所有要求都得到满足时,我的程序会正确地注册所有内容,并记录事务信息。
但是,当给定错误信息时,信息不会被记录下来,但事务仍然会进行,并且我不确定我做错了什么。
首先是记录事务信息的存储过程
/****** Object: StoredProcedure [dbo].[LogTransactionAttempt] Script Date: 8/1/2017 9:57:24 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[LogTransactionAttempt
我有两个类似的TSQL脚本,我在其中设置了XACT_ABORT。我期望_test表在脚本执行后不存在,因为我有意使用在事务中包装的语句,这将引发错误。
第一个脚本正确地回滚_test表的创建。
SET XACT_ABORT ON
GO
BEGIN TRANSACTION
CREATE TABLE dbo._test(ID int IDENTITY(1, 1) NOT NULL)
EXEC sp_does_not_exist --raises error!
GO
IF @@TRANCOUNT > 0
COMMIT;
但是,第二个脚本不会回滚_test的创建,并且该表在脚本执行后存在
我正在处理一个网站和数据库的一些问题后,服务器的移动。该数据库以前是SQL Server Express 2005,但现在在SQL Server Express 2012上运行。
这些问题与RAISERROR命令和2012年的更改相关。我已经查看了新语法的文档,但不确定如何将错误号和消息传递给网站。
存储过程和触发器中的RAISERROR命令的一些示例如下:
RAISERROR 50000 'Member with same Email address already exists.'
RAISERROR 44447 'The record can''
我是Vb.net和Linq2sql的新手,我在谷歌上搜索了一个解决方案,然后在这里发布了一个问题,但我无法解决,我试图使用Vb.net和Linq2sql将行插入到数据库中,SubmitChanges()函数在'@errno‘SQl异常附近返回不正确的语法。与表相关的触发器:
USE [Roster]
GO
/****** Object: Trigger [dbo].[ti_profile] Script Date: 11/14/2017
4:17:00 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
G
在发送准备好的记录集之前,我将使用一个简单的select语句报告存储过程的结果(无论它是成功的还是出错的)。因此,我只需在发送真实记录集之前插入这条select语句。但是,即使我将这两个select语句包装在一个事务中,使它们成为原子语句,如果第二个select语句引发错误,第一个select语句也会执行,并同时给出'ok‘和' error’。代码如下:
CREATE PROCEDURE my_procedure
@id INT = NULL
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN T
我正在尝试在int变量中显示存在性错误@MaxAmount和@MinAmount。
Raiserror('Total Amount should be less than %s and Greater than %s',16,1,@MaxAmount,@MinAmount)
但我错了:
必须声明标量变量“@MaxA装入”。
在Server 2016中。我创建了一个列,其中包含用户定义的数据类型,即绑定规则。T脚本,如:
CREATE RULE [dbo].[R_typeYesNo]
AS @column IN ('Y', 'N')
GO
CREATE TYPE [dbo].[typeYesNo]
FROM VARCHAR (1) NULL
GO
EXECUTE sp_bindrule [R_typeYesNo], [typeYesNo]
GO
CREATE TABLE dbo.MyRuleTable (
ID int
我试图在我的查询中使用RAISERROR,但是我不能让它工作。毫无疑问,我试图以完全错误的方式来做这件事。
例如,在下面的代码中,如果DestType字段为空或NULL,我希望它终止查询。
SELECT TOP 1
DocEntry,
DocNum,
CAST(DocDate AS DATE) AS [DocDate],
CAST(DocDueDate AS date) AS [ShipDate],
Comments,
DestType
FROM ....
我试着把它放在一个盒子里,当输入的东西,但那不起作用。
非常感谢!
我需要将错误传递给应用程序。我写的存储过程如下:它是将错误传递给应用程序,还是我们需要做更多的事情?
例如:
create procedure insert_emp
as
begin try
begin tran
insert into emp values(..........)
commit;
end try
begin catch
if @@trancount > 0
rollback
declare @errMessage varchar(2000),
declare @er
请参考下面的代码:
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Test]
AS
BEGIN
begin tran
begin try
SET NOCOUNT ON;
DECLARE @ID int
DECLARE @Count int
set @Count=0
DECLARE Employee_Cursor CURSOR FOR
SELECT id
FROM Person3;
OPEN Employee_Cursor;
FET