首页 文章

如何使用表名作为输入创建简单的存储过程

提问于
浏览
-1

我正在使用SQL Server 2017,我想创建一个存储过程,其中一个表名作为输入变量 . 我想要的程序是以各种方式更新该表 . 这个项目将每年进行两次,并且列总是相同的,所以我想尝试将其作为存储过程,因此我不必强调几行代码并每次执行 .

是否有一种简单的方法可以通过更新表的存储过程传递表名(添加列,计算列,替换列中的空值等) . 在一个基本示例中,一个任务只是用列中的0替换空值 . 我不知道如何设置它 . 我是否必须声明表格中的每一列?

CREATE PROCEDURE updteleform  
    @tablename TABLE
AS
BEGIN
    UPDATE @tablename
    SET Recog = 0
    WHERE Recog IS NULL
END
GO

1 回答

  • 1

    我假设您要更新物理表 . SQL Server表变量不能以这种方式工作,而是将瞬态结果集传递给存储过程的方法 . 如果您的存储过程不这样做,则没有持久性 .

    如果您要更新同一个表,那么只需编写该过程即可使用该表 .

    如果您希望使用相同的脚本更新多个表,那么您应该更改过程以接受字符串参数,该字符串参数将是您希望它处理的表的名称,然后在存储过程中使用动态SQL .

    就像是

    CREATE PROCEDURE updteleform  @tablename sysname
    AS
    BEGIN
    
    DECLARE @sql NVARCHAR(MAX);
    
    SET @sql = N'
    update ' + QUOTENAME(@tablename) + '
    set Recog= 0
    where Recog is null;';
    
    EXEC sp_executesql @sql;
    
    END
    GO
    

    然后用类似的东西来调用它:

    EXEC updteleform @tablename = 'table1';
    EXEC updteleform @tablename = 'table2';
    EXEC updteleform @tablename = 'table3';
    ...
    

相关问题