No SQL Server, é possível usar uma função com valor de tabela (TVF) para excluir dados das tabelas subjacentes que o TVF consulta.
Para excluir dados da tabela por meio de um TVF, basta usar o mesmo T-SQL
DELETE sintaxe que você usaria ao excluir uma linha da tabela diretamente. Exemplo
Aqui está um exemplo rápido para demonstrar.
A Função
Aqui está uma função rápida com valor de tabela embutida que seleciona dados básicos de uma tabela.
CREATE FUNCTION dbo.udf_Cats_ITVF()
RETURNS TABLE
AS
RETURN (
SELECT
CatId,
CatName,
Phone
FROM dbo.Cats
);
GO
Esta função seleciona todas as linhas de uma tabela.
Também posso usar essa função para excluir linhas dessa tabela.
Selecionar dados com a função
Veja como normalmente invocamos a função com um
SELECT demonstração. Isso nos permite ver os dados atuais na tabela subjacente. SELECT * FROM udf_Cats_ITVF();
Resultado:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | | 5 | Scratchy | 1111111111 | +---------+-----------+------------+
Portanto, há cinco linhas.
Vamos excluir o Scratchy.
Excluir uma linha por meio da função
Agora vamos usar o TVF para excluir uma linha.
DELETE FROM udf_Cats_ITVF() WHERE CatId = 5; SELECT * FROM udf_Cats_ITVF();
Resultado:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Então eu deletei com sucesso o Scratchy usando a função com valor de tabela embutida.