StrataFrame Forum
Home      Members   Calendar   Who's On
Welcome Guest ( Login | Register )
      



Trigger and RowsAffectedExpand / Collapse
Author
Message
Posted 07/29/2007 5:34:27 AM
StrataFrame User

StrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame User

Group: StrataFrame Users
Last Login: Today @ 5:25:12 AM
Posts: 404, Visits: 1,518
Hi,
How to prevent anything inside trigger affect value SqlDataReader.RecordsAffected?

Thank you
Post #10613
Posted 07/29/2007 5:38:35 AM
StrataFrame User

StrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame User

Group: StrataFrame Users
Last Login: Today @ 5:25:12 AM
Posts: 404, Visits: 1,518
Hi,
I tried to SET NOCOUNT ON but doesn't work.

Any ideas?
Post #10614
Posted 07/30/2007 9:08:07 AM


StrataFrame Developer

StrataFrame Developer

Group: StrataFrame Developers
Last Login: 08/01/2008 8:53:41 AM
Posts: 2,671, Visits: 1,879
If you want the number of affected records to be returned by the update sproc, but not the trigger, then call SET NOCOUNT ON at the top of the trigger and SET NOCOUNT OFF at the bottom of the trigger and call SET NOCOUNT OFF at the top of your UPDATE sproc and SET NOCOUNT ON at the bottom of the update sproc.


www.bungie.net
Post #10626
Posted 07/30/2007 9:58:03 AM
StrataFrame User

StrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame UserStrataFrame User

Group: StrataFrame Users
Last Login: Today @ 5:25:12 AM
Posts: 404, Visits: 1,518
Hi,
I am using dynamic SQL. I have trigger as below which will call another stored procedure. If I disable this trigger, RecordsAffected will be correct value. Any ideas?

CREATE TRIGGER [dbo].[T_PurchaseInvoices_UpdateQty]
ON [dbo].[PurchaseInvoices]
FOR UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for trigger here

IF UPDATE(LocationID) OR EXISTS(SELECT * FROM deleted)
BEGIN
SELECT * INTO #inserted_tmp FROM inserted
SELECT * INTO #deleted_tmp FROM deleted

EXEC spHeaderUpdateQty 'PurchaseInvoiceDetails', 'PInvoiceID', default, '+', 'InStock'
END

SET NOCOUNT OFF

END

CREATE PROCEDURE [dbo].[spHeaderUpdateQty]
@tablename VARCHAR(100),
@primarykey VARCHAR(100),
@locationfield VARCHAR(100) = 'LocationID',
@addminus CHAR(1),
@uom VARCHAR(20) = ''
AS

BEGIN
DECLARE
@row_count INT,
@error_number INT,
@error_message VARCHAR(255),
@sql VARCHAR(4000)

SET NOCOUNT ON;

SET @sql = 'SELECT i.ItemID
FROM ' + @tablename + ' p INNER JOIN Items i ON p.ItemID = i.ItemID
INNER JOIN #inserted_tmp t ON p.' + @primarykey + ' = t.' + @primarykey +
' WHERE KeepStock = 1'

EXEC (@sql)

SELECT @row_count = @@rowcount

IF (@row_count > 0)
BEGIN
SET @sql = 'UPDATE [dbo].[ItemLocations]
SET Qty = CASE p.Draft WHEN 1 THEN i.Qty ELSE i.Qty ' + @addminus + '
ISNULL(dbo.GetQtyByUOM(t.UOMID, s.' + @uom + 'UOMID, t.Qty), t.Qty) END
FROM [dbo].[ItemLocations] i, [dbo].[' + @tablename + '] t, [#inserted_tmp] p,
[dbo].[Items] s
WHERE s.ItemID = t.ItemID AND s.KeepStock = 1 AND
p.' + @primarykey + ' = t.' + @primarykey +
' AND i.ItemID = t.ItemID AND i.LocationID = p.' + @locationfield

EXEC (@sql)

SELECT @row_count = @@rowcount
IF @row_count = 0
BEGIN
SELECT @error_number=50001,
@error_message='No item qty is updated.'
GOTO error
END
ELSE
PRINT 'Qty updated'
END

SET @sql = 'SELECT i.ItemID
FROM ' + @tablename + ' p INNER JOIN Items i ON p.ItemID = i.ItemID
INNER JOIN #deleted_tmp t ON p.' + @primarykey + ' = t.' + @primarykey +
' WHERE KeepStock = 1'

EXEC (@sql)

SELECT @row_count = @@rowcount

IF (@row_count > 0)
BEGIN
IF (@addminus = '+')
BEGIN
SET @addminus = '-'
END
ELSE
BEGIN
SET @addminus = '+'
END

SET @sql = 'UPDATE [dbo].[ItemLocations]
SET Qty = CASE p.Draft WHEN 1 THEN i.Qty ELSE i.Qty ' + @addminus + '
ISNULL(dbo.GetQtyByUOM(t.UOMID, s.' + @uom + 'UOMID, t.Qty), t.Qty) END
FROM [dbo].[ItemLocations] i, [dbo].[' + @tablename + '] t, [#deleted_tmp] p,
[dbo].[Items] s
WHERE s.ItemID = t.ItemID AND s.KeepStock = 1 AND
p.' + @primarykey + ' = t.' + @primarykey +
' AND i.ItemID = t.ItemID AND i.LocationID = p.' + @locationfield

EXEC (@sql)

SELECT @row_count = @@rowcount
IF @row_count = 0
BEGIN
SELECT @error_number=50001,
@error_message='No item qty is reverted.'
GOTO error
END
ELSE
PRINT N'Qty reverted.'
END

SET NOCOUNT OFF

RETURN

/* Error Handling */
error:
RAISERROR @error_number @error_message
ROLLBACK TRANSACTION

SET NOCOUNT OFF

END
Post #10636
« Prev Topic | Next Topic »


Reading This TopicExpand / Collapse
Active Users: 0 (0 guests, 0 members, 0 anonymous members)
No members currently viewing this topic.
Forum Moderators: Ben Chase, Trent L. Taylor, Steve L. Taylor

PermissionsExpand / Collapse

All times are GMT -6:00, Time now is 4:08pm

Powered by InstantForum.NET v4.1.4 © 2008
Execution: 0.109. 10 queries. Compression Enabled.
Site Map - Home - My Account - Forum - About Us - Contact Us - Try It - Buy It

Microsoft, Visual Studio, and the Visual Studio logo are trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries.