/ / Jak utworzyć prostą procedurę składowaną z nazwą tabeli jako danych wejściowych - sql, sql-server, stored-procedures

Jak utworzyć prostą procedurę składowaną z nazwą tabeli jako danych wejściowych - sql, sql-server, stored-procedures

Korzystam z SQL Server 2017 i chciałbymutworzyć procedurę składowaną z jedną nazwą tabeli jako zmienną wejściową. Wszystko, co chcę zrobić, to zaktualizować tabelę na różne sposoby. Ten projekt będzie wykonywany dwa razy w roku, a kolumny będą zawsze takie same, więc chciałbym wypróbować to jako procedurę przechowywaną, więc nie muszę podkreślać kilku linii kodu i wykonywać za każdym razem.

Czy istnieje prosty sposób na przekazanie nazwy tabelipoprzez procedurę przechowywaną, która aktualizuje tabelę (dodawanie kolumn, obliczanie kolumn, zastępowanie wartości null w kolumnach itp.). W prostym przykładzie, jedno zadanie byłoby po prostu zastąpić wartościami zerowymi 0 w kolumnie. Nie jestem pewien, jak to ustawić. Czy muszę również zadeklarować każdą kolumnę w tabeli?

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

Odpowiedzi:

1 dla odpowiedzi № 1

Zakładam, że chcesz zaktualizować tabelę fizyczną. Zmienne tabeli SQL Server nie działają w ten sposób, a raczej są sposobem przekazania przejściowego wyniku do procedury przechowywanej. Nie ma trwałości, jeśli procedura składowana tego nie robi.

Jeśli chcesz zaktualizować tę samą tabelę, po prostu napisz procedurę do pracy nad tą tabelą.

Jeśli chcesz zaktualizować wiele tabelużywając tego samego skryptu, powinieneś zmienić procedurę, aby zaakceptować parametr łańcuchowy, który byłby nazwą tabeli, nad którą chcesz pracować, a następnie użyć dynamicznego SQL w swojej procedurze przechowywanej.

Coś jak

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

A potem wywołaj to z czymś takim jak:

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