使用存储过程(sp_executesql @sql)将动态SQL(T-SQL)插入(动态表名)

问题描述 投票:0回答:1

我正在努力将值插入表中的存储过程。

表名是变量,例如,Log1

此表包含以下列:实际,管制,供应,预期,ControlValue所有类型为float

存储过程具有相同的输入参数,除此之外,表名称也是如此。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO    

ALTER PROCEDURE [dbo].[InsertIntoTable](
   @TableName nvarchar(50),
   @Actual real,
   @Regulated real,
   @Supply real,
   @Expected real,
   @Control_Value real)
AS
BEGIN 
  SET NOCOUNT ON; 
  DECLARE @columnList varchar(75)
  DECLARE @SQL NVARCHAR(MAX) -- dynamic SQL should always be Unicode

  SET @SQL = N'INSERT INTO dbo.' + @TableName +  '([Actual],[Regulated],[Supply],[Expected],[Control_Value])
        VALUES('+@Actual+','+@Regulated+', '+@Supply+','+@Expected+','+@Control_Value+')'  

  EXEC sp_executesql @sql    
END  
sql-server tsql stored-procedures sql-insert dynamic-sql
1个回答
0
投票

正确使用动态语句,并将存储过程参数作为参数传递给sp_executesql

ALTER PROCEDURE [dbo].[InsertIntoTable](
   @TableName nvarchar(50),
   @Actual real,
   @Regulated real,
   @Supply real,
   @Expected real,
   @Control_Value real)
AS
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @err int
    DECLARE @sql NVARCHAR(MAX)

    SET @sql = 
        N'INSERT INTO dbo.' + QUOTENAME(@TableName) + ' ([Actual],[Regulated],[Supply],[Expected],[Control_Value]) '+
        N'VALUES (@Actual, @Regulated, @Supply, @Expected, @Control_Value)'  

    EXEC @err = sp_executesql 
        @sql, 
        N'@Actual real, @Regulated real, @Supply real, @Expected real, @Control_Value real',
        @Actual, @Regulated, @Supply, @Expected, @Control_Value

    RETURN @err 
END  
© www.soinside.com 2019 - 2024. All rights reserved.