Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Check record existence using Dynamic SQL
Message
 
 
To
30/07/2007 09:46:34
General information
Forum:
Microsoft SQL Server
Category:
Other
Environment versions
SQL Server:
SQL Server 2005
Miscellaneous
Thread ID:
01244442
Message ID:
01244809
Views:
17
I would create a template for a trigger and than generate code for each trigger using a frontend tool of your choice or even T-SQL.

>Below is the trigger and stored procedure. Please advice. Thank you
>
>
>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
>
--sb--
Previous
Reply
Map
View

Click here to load this message in the networking platform