如何创建一个以表名作为输入的简单存储过程

时间:2018-05-02 15:59:08

标签: sql sql-server stored-procedures

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

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

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

1 个答案:

答案 0 :(得分: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';
...