OVH Cloud OVH Cloud

sqlserver

3 réponses
Avatar
stephane
bonjour a tous,


j'utilise sqlserverce surmon pocket pc et des que je veux executer la
requete suivante il me met un message d'erreur

delete from matable

quelqu'un sait pk ?

3 réponses

Avatar
stephane
je me suis trompe, c'est la requete suivante qui marche pas

delete * from matable


"stephane " <stephane<nospam> a écrit dans le message de
news: 42655fcd$0$3897$
bonjour a tous,


j'utilise sqlserverce surmon pocket pc et des que je veux executer la
requete suivante il me met un message d'erreur

delete from matable

quelqu'un sait pk ?




Avatar
Alain Zanchetta [MS]
Bonjour,,

parce que justement, la syntaxe correcte est delete from matable et non
delete * from matable ;-)

bonne journée

Alain Zanchetta

"stephane " <stephane<nospam> a écrit dans le message de
news: 42656078$0$3888$
je me suis trompe, c'est la requete suivante qui marche pas

delete * from matable


"stephane " <stephane<nospam> a écrit dans le message de
news: 42655fcd$0$3897$
bonjour a tous,


j'utilise sqlserverce surmon pocket pc et des que je veux executer la
requete suivante il me met un message d'erreur

delete from matable

quelqu'un sait pk ?








Avatar
Philippe Klein
"stephane" <stephane<nospam> wrote in
news:42656078$0$3888$:

je me suis trompe, c'est la requete suivante qui marche pas



t'as la réponse à ta question ...
maintenant c'est comme toujours...
et la doc elle sert à quoi..?

Se rappeler aussi que les caractères génériques ne sont pas les mêmes en
access et sous SqlServer.

Allez hop j'chuis bon prince un copié collé de la doc.

Référence de Transact-SQL


DELETE
Supprime des lignes dans une table.

Syntaxe
DELETE
[ FROM ]
{ table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
}

[ FROM { < table_source > } [ ,...n ] ]

[ WHERE
{ < search_condition >
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
] }
}
]
[ OPTION ( < query_hint > [ ,...n ] ) ]

< table_source > ::=
table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
| view_name [ [ AS ] table_alias ]
| rowset_function [ [ AS ] table_alias ]
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| < joined_table >

< joined_table > ::=
< table_source > < join_type > < table_source > ON < search_condition >
| < table_source > CROSS JOIN < table_source >
| < joined_table >

< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ < join_hint > ]
JOIN

< table_hint_limited > ::=
{ FASTFIRSTROW
| HOLDLOCK
| PAGLOCK
| READCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
}

< table_hint > ::=
{ INDEX ( index_val [ ,...n ] )
| FASTFIRSTROW
| HOLDLOCK
| NOLOCK
| PAGLOCK
| READCOMMITTED
| READPAST
| READUNCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
}

< query_hint > ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| FAST number_rows
| FORCE ORDER
| MAXDOP
| ROBUST PLAN
| KEEP PLAN
}

Arguments
FROM

Mot-clé facultatif qui peut être inséré entre le mot-clé DELETE et
l'argument table_name, view_name ou rowset_function_limited cible.

table_name

Nom de la table à partir de laquelle sont extraites les lignes.

Une variable table, dans sa portée, ou un nom de table en quatre éléments
(ou nom de vue) utilisant la fonction OPENDATASOURCE comme nom de serveur
peut également être utilisé comme source de table dans une instruction
DELETE.

WITH (<table_hint_limited> [...n])

Une ou plusieurs options de table autorisées pour une table cible. Le mot
clé WITH et les parenthèses sont obligatoires. READPAST, NOLOCK et
READUNCOMMITTED ne sont pas autorisés. Pour plus d'informations sur les
indicateurs de table, voir FROM.

view_name

Nom d'une vue. La vue à laquelle fait référence view_name doit pouvoir être
mise à jour et doit faire référence exactement à une table de base dans sa
clause FROM. Pour plus d'informations sur les vues pouvant être mises à
jour, voir CREATE VIEW.



Remarque Si la table ou la vue existe dans une autre base de données ou a
un propriétaire autre que l'utilisateur actuel, spécifiez un nom composé de
quatre éléments, du format server_name.database.[owner].object_name. Pour
plus d'informations, voir Conventions de la syntaxe de Transact-SQL.


rowset_function_limited

Fonctions OPENQUERY ou OPENROWSET, en fonction des possibilités du
fournisseur. Pour plus d'informations sur les fonctionnalités dont a besoin
le fournisseur, voir Conditions associées aux instructions UPDATE et DELETE
pour les fournisseurs OLE DB. Pour plus d'informations, voir OPENQUERY et
OPENROWSET.

FROM <table_source>

Spécifie une clause FROM supplémentaire. Cette extension Transact-SQL à
l'instruction DELETE vous permet de spécifier des données de < table_source
et de supprimer les lignes correspondantes de la table référencée dans la
première clause FROM.


Cette extension qui spécifie une jointure, peut être utilisée dans la
clause WHERE à la place d'une sous-requête pour identifier les lignes à
supprimer.

table_name [[AS] table_alias ]
Nom de la table fournissant les critères pour l'opération de suppression.

| view_name [ [AS] table_alias ]
Nom de la vue fournissant les critères pour l'opération de suppression. Une
vue avec un déclencheur INSTEAD OF UPDATE ne peut pas service de cible à
une instruction UPDATE avec une clause FROM.

WITH (<table_hint>
Spécifie un ou plusieurs indicateurs de table. Pour plus d'informations sur
les indicateurs de table, voir FROM.

rowset_function [ [AS] table_alias ]
Nom d'une fonction rowset et d'un alias optionnel. Pour obtenir la liste
des fonctions d'ensemble de lignes, voir Fonctions d'ensembles de lignes.

derived_table [AS] table_alias
Sous-requête qui récupère les lignes de la base de données. derived_table
est utilisé comme entrée pour le résultat de la requête.

column_alias
Alias facultatif qui peut remplacer un nom de colonne dans le jeu de
résultats. Utilisez un alias de colonne pour chaque colonne de la liste de
sélection et placez l'intégralité de la liste d'alias entre parenthèses.
<table_jointe>

Jeu de résultats qui correspond au produit de deux ou plusieurs tables,
comme par exemple :

SELECT *
FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
ON tab3.c1 = tab4.c1
ON tab2.c3 = tab4.c3

Pour plusieurs jointures CROSS, vous devez utiliser les parenthèses pour
modifier l'ordre naturel des jointures.

<join_type>

Type d'opération de jointure.

INNER
Spécifie toutes les paires correspondantes des lignes renvoyées. Supprime
les lignes n'ayant pas de correspondance entre les deux tables. Ceci est
l'option par défaut si aucun type de jointure n'est spécifié.

LEFT [OUTER]
Spécifie que toutes les lignes de la table de gauche qui ne répondent pas à
la condition spécifiée sont incluses dans le jeu de résultats et que les
colonnes de sortie de la table de droite prennent la valeur NULL, en plus
de toutes les lignes renvoyées par la jointure interne.

RIGHT [OUTER]
Spécifie que toutes les lignes de la table de droite ne correspondant pas à
la condition spécifiée sont incluses dans le jeu de résultats et que les
colonnes de sortie de la table de gauche prennent la valeur NULL, en plus
de toutes les lignes renvoyées par la jointure interne.

FULL [OUTER]
Si une ligne d'une des deux tables ne répond pas aux critères de sélection,
cette option spécifie la ligne à inclure dans le jeu de résultats et les
colonnes de sortie qui correspondent à l'autre table doivent prendre la
valeur NULL. Ceci en plus de toutes les lignes généralement renvoyées par
la jointure interne.

JOIN
Mot-clé indiquant qu'une jointure de type SQL-92 sera utilisée dans
l'opération de suppression.
ON <condition_de_recherche>

Indique la condition sur laquelle se base la jointure. Celle-ci peut
spécifier tout prédicat, bien que les opérateurs de colonne et de
comparaison soient souvent utilisés, comme par exemple :

FROM Suppliers JOIN Products
ON (Suppliers.SupplierID = Products.SupplierID)

Si la condition spécifie des colonnes, celles-ci n'ont pas besoin d'avoir
le même nom ni le même type de données. Cependant, si les types de données
sont différents, ils doivent être compatibles ou pouvoir être convertis de
manière implicite par Microsoft® SQL Server™. Si les types de données ne
peuvent pas être convertis implicitement, la condition de jointure doit le
faire explicitement à l'aide de la fonction CAST.

Pour plus d'informations sur les conditions de recherche et les prédicats,
voir Search Condition.

CROSS JOIN

Spécifie le produit croisé de deux tables. Renvoie les mêmes lignes que si
aucune clause WHERE n'avait été spécifiée dans une ancienne jointure d'un
style différent de SQL-92.

WHERE

Spécifie les conditions limitant le nombre de lignes à supprimer. Si une
clause WHERE n'est pas spécifiée, DELETE supprime toutes les lignes de la
table. Il existe deux types d'opérations de suppression, selon les
conditions définies dans la clause WHERE :

Une suppression par recherche spécifie une condition de recherche
permettant de désigner les lignes à supprimer.


Une suppression positionnée utilise la clause CURRENT OF pour spécifier un
curseur. La suppression a lieu à la position actuelle du curseur. Cette
opération peut être plus précise qu'une instruction DELETE par recherche
qui utilise une clause WHERE search_condition pour spécifier les lignes à
supprimer. Une instruction DELETE par recherche supprime plusieurs lignes
si la condition de recherche n'identifie pas de ligne unique.
<condition_de_recherche>
Spécifie les conditions restrictives applicables aux lignes à supprimer. Le
nombre de prédicats inclus dans une condition de recherche est illimité.
Pour plus d'informations, voir Search Condition.

CURRENT OF
Spécifie que l'instruction DELETE prend effet à la position actuelle du
curseur spécifié.

GLOBAL
Précise que cursor_name renvoie à un curseur global.

cursor_name
Nom du curseur ouvert à partir duquel est faite l'extraction. Si un curseur
global et un curseur local sont tous deux dotés du nom cursor_name,
cursor_name renvoie au curseur mondial si GLOBAL est précisé, et au curseur
local dans tous les autres cas. Le curseur doit pouvoir gérer les mises à
jour.

cursor_variable_name
Nom d'une variable de curseur. La variable de curseur doit référencer un
curseur capable de gérer les mises à jour.
OPTION (<query_hint> [,...n] )

Mots-clés indiquant que les directives de l'optimiseur sont utilisées pour
personnaliser le traitement de l'instruction par SQL Server.

{HASH | ORDER} GROUP
Spécifie que les agrégations utilisées dans les clauses GROUP BY ou COMPUTE
de la requête doivent utiliser le hachage ou le classement.

{MERGE | HASH | CONCAT} UNION
Spécifie que toutes les opérations UNION doivent être effectuées par la
fusion, le hachage ou la concaténation d'ensembles UNION. Si plus d'une
option UNION est spécifiée, l'optimiseur sélectionne la stratégie la moins
coûteuse parmi les options spécifiées.


Remarque Si une < join_hint > est également spécifiée pour une paire
spécifique de tables jointes dans la clause FROM, celle-ci a priorité sur
toute autre < join_hint > spécifiée dans la clause OPTION.



FAST number_rows
Spécifie que la requête est optimisée pour une extraction rapide du premier
number_rows (un entier non négatif). Une fois le premier number_rows
renvoyé, la requête se poursuit afin de générer un jeu de résultats
complet.

FORCE ORDER
Spécifie que l'ordre de jointure spécifié dans la syntaxe de la requête est
protégé durant l'optimisation de la requête.

MAXDOP number
Ne modifie que l'option de configuration degré max. de parallélisme (de
sp_configure) de la requête le demandant. Toutes les règles sémantiques
utilisées avec l'option de configuration degré max. de parallélisme sont
applicables lorsque vous utilisez l'option de requête MAXDOP. Pour plus
d'informations, reportez-vous à Option max degree of parallelism.

ROBUST PLAN
Force l'optimiseur de requêtes à utiliser un plan capable de prendre en
charge la taille maximale potentielle des lignes, aux dépens des
performances. Si un tel plan n'est pas possible, l'optimiseur de requêtes
renvoie une erreur au lieu de différer la détection de l'erreur à
l'exécution de la requête. Les lignes peuvent contenir des colonnes de
longueur variable. SQL Server permet de définir des lignes d'une taille
maximale potentielle qu'il n'est pas en mesure de traiter. En général,
malgré la taille maximale potentielle, une application stocke des lignes
dont la taille réelle est comprise dans les limites gérées par SQL Server.
Si SQL Server trouve une ligne trop longue, il renvoie une erreur
d'exécution.
KEEP PLAN

Force l'optimiseur de requêtes à détendre le seuil de recompilation estimé
pour une requête. Le seuil de recompilation estimé correspond au point
auquel la requête est automatiquement recompilée lorsque le nombre estimé
de modifications de colonnes indexées (update, delete ou insert) a été
effectué sur une table. La spécification de KEEP PLAN permet qu'une requête
ne soit pas recompilée aussi fréquemment lorsqu'il y a plusieurs mises à
jour effectuées sur une table.

Notes
DELETE peut être utilisé dans le corps d'une fonction définie par
l'utilisateur si l'objet modifié est une variable table.

Un nom de table à quatre éléments (ou nom de vue) utilisant la fonction
OPENDATASOURCE comme nom de serveur peut être utilisé comme source de table
partout où un nom de table peut apparaître.

L'instruction DELETE peut échouer si elle ne respecte pas un déclencheur ou
si elle tente de supprimer une ligne référencée par des données dans une
autre table, à l'aide d'une contrainte FOREIGN KEY. Si l'instruction
supprime plusieurs lignes, et qu'une de ces lignes ne respecte pas un
déclencheur ou une contrainte, une erreur est renvoyée et aucune ligne
n'est supprimée.

Lorsqu'un déclencheur INSTEAD-OF est défini pour les actions DELETE sur une
table ou une vue, le déclencheur s'exécute instead_ofl'instruction DELETE.
Les versions antérieures de SQL Server prennent en charge les déclencheurs
AFTER uniquement sur DELETE et les autres instructions de modification des
données.

Lorsqu'une instruction DELETE rencontre une erreur arithmétique (erreur de
dépassement de capacité, de division par zéro ou de domaine) lors de
l'évaluation de l'expression, SQL Server gère ces erreurs comme si SET
ARITHABORT a la valeur ON. Le reste du lot d'instructions est annulé et un
message d'erreur est renvoyé.

La valeur de l'option SET ROWCOUNT est ignorée pour les instructions DELETE
portant sur les tables distantes et les vues partitionnées locales et
distantes.

L'instruction TRUNCATE TABLE est plus rapide que DELETE si vous voulez
supprimer toutes les lignes d'une table. En effet, l'instruction DELETE
supprime une ligne à la fois et enregistre une entrée dans le journal des
transactions pour chaque ligne supprimée. L'instruction TRUNCATE TABLE
libère toutes les pages associées à la table. Pour cette raison, la seconde
instruction est plus rapide et elle utilise moins d'espace dans le journal
des transactions. TRUNCATE TABLE équivaut à une instruction DELETE ne
comportant pas de clause WHERE, mais elle ne peut toutefois être utilisée
avec des tables référencées par des clés étrangères. Une fois les lignes
supprimées par les instructions DELETE et TRUNCATE TABLE, l'espace libéré
peut être réutilisé pour le stockage de nouvelles données.

Autorisations
Les autorisations DELETE reviennent par défaut aux membres du rôle de
serveur fixe sysadmin, aux rôles de base de données fixes db_owner et
db_datawriter et au propriétaire de la table. Les membres des rôles
sysadmin, db_owner et db_securityadmin, ainsi que le propriétaire de la
table peuvent attribuer des autorisations aux autres utilisateurs.

Des autorisations SELECT sont également requises si l'instruction comporte
une clause WHERE.

Exemple
A. Utilisation de DELETE sans paramètre
L'exemple suivant supprime toutes les lignes de la table authors.

USE pubs
DELETE authors

B. Utilisation de DELETE sur un ensemble de lignes
Les noms d'auteurs au_lname peuvent ne pas être uniques, l'exemple suivant
supprime toutes les lignes dans lesquelles au_lname est McBadden.

USE pubs
DELETE FROM authors
WHERE au_lname = 'McBadden'

C. Utilisation de DELETE sur la ligne actuelle d'un curseur
L'exemple suivant illustre une suppression faite sur un curseur nommé
complex_join_cursor. Elle affecte uniquement la ligne actuelle extraite à
partir du curseur.

USE pubs
DELETE FROM authors
WHERE CURRENT OF complex_join_cursor

D. Utilisation de DELETE basée sur une sous-requête ou utilisation de
l'extension Transact-SQL
L'exemple suivant utilise l'extension Transact-SQL pour supprimer des
enregistrements dans une table de base qui est basée sur une jointure ou
une sous-requête en corrélation. La première instruction DELETE utilise une
sous-requête compatible avec SQL-92 tandis que la seconde utilise
l'extension Transact-SQL. Les deux requêtes suppriment des lignes de la
table titleauthors, en se basant sur les titres stockés dans la table
titles.

/* SQL-92-Standard subquery */
USE pubs
DELETE FROM titleauthor
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE title LIKE '%computers%')

/* Transact-SQL extension */
USE pubs
DELETE titleauthor
FROM titleauthor INNER JOIN titles
ON titleauthor.title_id = titles.title_id
WHERE titles.title LIKE '%computers%'

E. Utilisation de DELETE et de SELECT avec la clause TOP
Tout comme une instruction SELECT peut être spécifiée dans une instruction
DELETE, la clause TOP peut être utilisée dans une instruction SELECT.
L'exemple suivant supprime les 10 premiers auteurs de la table authors.

DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id


Voir aussi

CREATE TABLE

CREATE TRIGGER

Curseurs

DROP TABLE

INSERT

SELECT

TRUNCATE TABLE

UPDATE

©1988-2000 Microsoft Corporation. Tous droits réservés.