我在修改模式下具有如下的存儲過程。我需要動態傳遞tablename,甚至字符串連接也沒問題。但是,因爲我不太熟悉存儲過程,所以沒有找到辦法做到這一點。任何指導都會有所幫助。 testdata是表名。我需要動態傳遞@TableName。在存儲過程中動態添加表名
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 @[email protected]@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
我認爲動態查詢將有所幫助。 –
我不知道改變這個SP。所以尋求幫助。 – user3660473
無論何時您必須將表名稱傳遞給過程,它都應該是一個紅旗,可能會有更好的數據設計可供您使用。 –