我正在使用SQL Server 2017,我想创建一个存储过程,其中一个表名作为输入变量。我想要的程序是以各种方式更新该表。这个项目一年两次,并且列总是一样的,所以我想尝试将它作为一个存储过程,所以我不必强调几行代码并每次都执行。
是否有一种简单的方法可以通过更新表的存储过程传递表名(添加列,计算列,替换列中的空值等)。在一个基本示例中,一个任务只是用列中的0替换空值。我不知道如何设置它。我是否必须声明表格中的每一列?
CREATE PROCEDURE updteleform
@tablename TABLE
AS
BEGIN
UPDATE @tablename
SET Recog = 0
WHERE Recog IS NULL
END
GO
答案 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';
...