Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Excluir dados por meio de uma função com valor de tabela no SQL Server


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.