【问题标题】:SQL Server single stored procedure for insertion用于插入的 SQL Server 单个存储过程
【发布时间】:2012-10-20 22:10:23
【问题描述】:

我正在尝试在 SQL Server 2008 中创建一个存储过程,它可以将数据插入任何表(不是特定于表的)。我创建了一个如下所示的,但是在执行过程期间抛出了一个异常,即

无效的对象名称'dbo.@table'。

存储过程代码:

CREATE PROCEDURE dbo.sp_InsertValues
   @table varchar(15)
   , @fields varchar(100)
   , @values varchar(100)   
AS
BEGIN
   INSERT INTO [dbo].[@table] (@fields) VALUES (@values)
END
GO

记得我检查了参数表,列和值参数不为空。

【问题讨论】:

  • 要做到这一点,你将不得不从你传入的参数中创建动态 sql。
  • 要充实 Adam 的评论,请参阅 Execute
  • 这种技术不好,因为它没有充分的理由不使用参数化 SQL。请不要这样做。在决定以这种方式插入数据之前,研究为什么参数化 SQL 很重要。

标签: sql-server sql-server-2008


【解决方案1】:

您需要使用动态 SQL 构建命令,然后执行它。试试这个:

CREATE PROCEDURE dbo.sp_InsertValues
   @table nvarchar(15)
   , @fields nvarchar(100)
   , @values nvarchar(100)   
AS
BEGIN
    DECLARE @SQL NVARCHAR(MAX)
    SET @SQL = 'INSERT INTO [dbo].' + QUOTENAME(@table) + '(' + @fields +') VALUES (' +  @values + ')'
    EXEC(@SQL)
END
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多