2012-10-20 70 views
0

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

无效的对象名称'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 

记住我检查的参数表,列和值参数不为空。

+3

要做到这一点,你将能够建立动态SQL出你传递的参数 –

+0

为了充实亚当的评论,参见[执行](http://msdn.microsoft .COM/EN-US /库/ ms188332(v = SQL.100)的.aspx)。 – HABO

+0

这种技术并不好,因为它没有使用参数化的SQL。请不要这样做。研究,为什么参数化SQL在决定插入数据的这种方式之前是重要的。 – usr

回答

2

您将需要使用动态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