插入@table,其中@table是变量

时间:2019-11-19 19:48:23

标签: sql sql-server database sql-insert

我遇到了一个小问题:我想创建一个过程,该过程在通过参数指定的表中插入一些行。因此,沿着代码我已经达到了这一点:

CREATE PROCEDURE my_proc @tableName VARCHAR(30)
AS
    -- ...some code...
    INSERT INTO @tableName VALUES(...some values...)
    -- ...some code...
GO

这不起作用,所以也许我丢失了一些东西。

P.S:我正在使用Microsoft SQL Server Management Studio 2018

1 个答案:

答案 0 :(得分:0)

您只能将变量用于查询中的常量,而不能用于标识符。因此,您需要使用动态SQL:

declare @sql nvarchar(max);

set @sql = 'insert into [tablename] values ( . . . )';

set @sql = replace(@sql, '[tablename]', quotename(tablename));

exec sp_executesql @sql;

两点。首先,如果您打算使用多部分标识符传递表名,那么quotename()是不合适的。

更重要的是,在关系数据库中几乎不需要传递这样的表名。如果发现需要这样做,则可能是您的数据模型有问题。我猜您有多个具有相同结构的表,这些表应合并为一个表,而不是多个表。

要处理引号字符串:

set @sql = 'insert into [tablename] values (''aaa'', ''bbb'', . . . )';

那些是重复的单引号(''),而不是双引号(")。