我正在努力将值插入表中的存储过程。
表名是变量,例如,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
正确使用动态语句,并将存储过程参数作为参数传递给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