【问题标题】:Build Stored Procedure that inserts data into a received table构建将数据插入到接收到的表中的存储过程
【发布时间】:2019-03-30 14:42:11
【问题描述】:

我构建了一个过程,它接收带有表名的参数,并将新数据插入到该表中。

CREATE PROCEDURE sp_Ins 
     @tabela NVARCHAR(80)
AS
     INSERT INTO @tabela (CustomerID, CustomerPW) 
     VALUES (1, '123')
GO

CREATE PROCEDURE SP1 
     @tabela NVARCHAR(80)
AS
     EXEC sp_Ins @tabela
GO

EXEC SP1 'CustomerPW'

但我收到了这条消息:

必须声明表变量@tabela

如何声明接收到的参数以将参数识别为表?

【问题讨论】:

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012


【解决方案1】:

抱歉,您需要使用动态 SQL。不能插入字符串:

CREATE PROCEDURE sp_Ins (@tabela nvarchar(80))
AS
BEGIN
    declare @sql nvarchar(max) = '
INSERT INTO [t](CustomerID, CustomerPW)
    VALUES (1, ''123'')
;
    set @sql = replace(@sql, '[t]', QUOTENAME(@tablea));

    exec sp_executesql @sql;
END;

注意:如果 tablea 可以使用多部分命名,您可能不需要 quotename()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2016-09-21
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多