I have a stored procedure as below in modify mode. I need to pass tablename dynamically or even string concatenation is also fine. But as am not very familiar with stored procedures am not finding a way to do this. Any guidance will be helpful. testdata is the table name. I need to pass @TableName dynamically.
USE [test1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TestDataTest]
@TicketId VARCHAR(12),
@TesterId int,
@ValidatorId varchar(10),
@count int,
@TableName varchar(20),
@ReturnVal int output
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ReserveStatus char(1),@ret int, @index int,@rs CHAR,@secindex INT,@value INT,@SQL nvarchar(500),@SQL1 nvarchar(500)
BEGIN TRAN
INSERT INTO TblStatus (TicketId,TesterId,ValidatorId)
VALUES
(@TicketId,@TesterId,@Validator)
IF (@@ERROR<>0 )
BEGIN
ROLLBACK TRAN
SET @ReturnVal=2
Return @ReturnVal
END
WHILE @count >0
BEGIN
SELECT @index=CHARINDEX(' ', @TestDataIdstring,0)
SELECT @secindex=CHARINDEX(' ', @TestDataIdstring,(CHARINDEX(' ', @TestDataIdstring,0))+1)
SELECT @value=@secindex-@index
SELECT @value
select @SQL1 = N'Select ReserveStatus from ' + QUOTENAME(@TableName) + ' where TestDataId= rtrim(Ltrim(SUBSTRING(''' + @TestDataIdstring + ''',' + @index +',' + @value + ')))'
execute sp_executesql @SQL1 , N'@RS int OUTPUT', @RS = @RS output;
IF (@rs='N')
BEGIN
Set @SQL = N'Update ' + QUOTENAME(@Tablename) + ' set ReserveStatus=''Y'',TicketId=' + @TicketId + ' where TestDataId= rtrim(Ltrim(SUBSTRING(''' + @TestDataIdstring + ''',' + @index +',' + @value + ')))'
Execute sp_executesql @SQL
IF (@@ERROR<>0 )
BEGIN
ROLLBACK TRAN
SET @ReturnVal=2
Return @ReturnVal
END
COMMIT TRAN
SET @ReturnVal=3
return @SQL
return @returnval
END