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.