I am using SQL Server 2008.
I have many tables, each table contains ID field and TheOrder field.
I want to create a stored procedure which can swap values of two records in TheOrder field.
I am getting the IDs of these records by ASP.NET code and pass them to the stored procedure.
But because I want to execute this stored procedure on many tables, I have to use dynamic SQL and pass table name from ASP.NET code.
My stored procedure code is:
ALTER PROCEDURE [dbo].[SwapOrders]
@TblName nvarchar(20)
, @ID1 int
, @ID2 int
AS
BEGIN
DECLARE @ID1Str nvarchar(5)
SET @ID1Str = CAST(@ID1 AS nvarchar)
DECLARE @ID2Str nvarchar(5)
SET @ID2Str = CAST(@ID2 AS nvarchar)
DECLARE @Order1 nvarchar(5)
DECLARE @Order2 nvarchar(5)
DECLARE @Cmd nvarchar(100)
/* Get orders */
SET @Cmd = 'SELECT @Order1 = [TheOrder] FROM ' + @TblName + ' WHERE ID = ' + @ID1Str
EXECUTE sp_executesql @Cmd, "@Order1 nvarchar(5) OUTPUT", @Order1 = [TheOrder]
SET @Cmd = 'SELECT @Order2 = [TheOrder] FROM ' + @TblName + ' WHERE ID = ' + @ID2Str
EXECUTE sp_executesql @Cmd, "@Order2 nvarchar(5) OUTPUT", @Order2 = [TheOrder]
/* Update orders */
SET @Cmd = 'UPDATE ' + @TblName + ' SET TheOrder = @Order2 WHERE ID = ' + @ID1Str
EXECUTE sp_executesql @Cmd, "@Order2 nvarchar(5)", @Order2
SET @Cmd = 'UPDATE ' + @TblName + ' SET TheOrder = @Order1 WHERE ID = ' + @ID2Str
EXECUTE sp_executesql @Cmd, "@Order1 nvarchar(5)", @Order1
END
GO
When I tested this code, two values of TheOrder field become NULL.
What is the problem?
Thanks very much for any help, and I am sorry for long question.
See this working demo
The code is below