Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème text procédure stockée (seulement quand j'update)

17 réponses
Avatar
ucasesoftware
source de l'erreur :
@resume text =3Dnull,

erreur :
Seuls les pointeurs de texte sont autoris=E9s dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requ=EAtes a fourni un plan de requ=EAte n=E9cessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier =3D null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image =3D null,
@Adresse nvarchar(300),
@telephone nvarchar(20)=3D null,
@telecopie nvarchar(20) =3D null,
@mobile nvarchar(20) =3Dnull,
@email nvarchar(350) =3Dnull,
@url nvarchar(350) =3D null,
@siret nvarchar(20) =3Dnull,
@codeNaf nvarchar(10) =3Dnull,
@resume text =3Dnull,
@maxSalarie int =3Dnull,
@isActive bit,
@activeOffReason nvarchar(300) =3Dnull,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =3Dnull,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =3Dnull,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =3Dnull
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
=3D @entrepriseGuid)
UPDATE entreprise
SET
centreGuid =3D @centreGuid,
entrepriseGuid =3D @entrepriseGuid,
isCentre =3D @isCentre,
dateCreate =3D @dateCreate,
raisonSociale =3D @raisonSociale,
logo =3D @logo,
Adresse =3D @Adresse,
telephone =3D @telephone,
telecopie =3D @telecopie,
mobile =3D @mobile,
email =3D @email,
url =3D @url,
siret =3D @siret,
codeNaf =3D @codeNaf,
resume =3D @resume,
maxSalarie =3D @maxSalarie,
isActive =3D @isActive,
activeOffReason =3D @activeOffReason,
isArchive =3D @isArchive,
isAbonneSms =3D @isAbonneSms,
dateAbonneSms =3D @dateAbonneSms,
nbSmsRecu =3D @nbSmsRecu,
isAbonneFax =3D @isAbonneFax,
dateAbonneFax =3D @dateAbonneFax,
nbFaxRecu =3D @nbFaxRecu,
baseInternetAdd =3D @baseInternetAdd,
baseInternetUpdate =3D @baseInternetUpdate,
dateBaseInternet =3D @dateBaseInternet
WHERE entrepriseGuid =3D @entrepriseGuid

GO

10 réponses

1 2
Avatar
Fred BROUARD
c'est clair : @resume est de type text est n'est donc pas supporté dans un
update. Il faut pour cela utiliser des pointeurs. Voir READTEXT : WRITETEXT

A +

a écrit:
source de l'erreur :
@resume text =null,

erreur :
Seuls les pointeurs de texte sont autorisés dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requêtes a fourni un plan de requête nécessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image = null,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text =null,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
logo = @logo,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
resume = @resume,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid

GO




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
ucasesoftware
oui je l'ai fait et ca marche...

par contre quand ntext = null ca pause problème Fredéric

Et ce que je comprends pas c'est pourquoi à l'insert ca passe sans
WriteText ?
Avatar
Med Bouchenafa
D'après le message d'erreur, c'est la table de travail temporaire créée dans
le plan d'exécution qui pose problème
Il faut reécrire ta requete de façon à éviter la création de cette table
temporaire
Un UPDATE peut se modifier en DELETE suivi d'un INSERT
Tu peux aussi faire ton UPDATE en deux étapes
a) Un UPDATE sans la colonne TEXT
b) Suivi d'un UPDATE de la colonne TEXT

--
Bien cordialement
Med Bouchenafa

wrote in message
news:
source de l'erreur :
@resume text =null,

erreur :
Seuls les pointeurs de texte sont autorisés dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requêtes a fourni un plan de requête nécessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image = null,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text =null,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
logo = @logo,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
resume = @resume,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid

GO
Avatar
SM
Je pense que SQLServer2000 ne permet pas d'updater dans une seule operation
un clustererd index et une colonne de type text et j'imagine que
"entrepriseGuid" est un clustered index ce qui cause l'erreur,
Essaie de supprimer entrepriseGuid = @entrepriseGuid dans ton update et voir
si le probleme disparait !

Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT JAMAIS
etre modifié


wrote in message
news:
source de l'erreur :
@resume text =null,

erreur :
Seuls les pointeurs de texte sont autorisés dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requêtes a fourni un plan de requête nécessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image = null,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text =null,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
logo = @logo,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
resume = @resume,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid

GO
Avatar
Thierry
C'est donc ça !!!

Je me demandais pourquoi Fred disait qu'on ne pouvait pas updater une
colonne Text, alors que je n'ai jamais eu de problème pour le faire.

--
Thierry


"SM" a écrit dans le message de news:

Je pense que SQLServer2000 ne permet pas d'updater dans une seule
operation
un clustererd index et une colonne de type text et j'imagine que
"entrepriseGuid" est un clustered index ce qui cause l'erreur,
Essaie de supprimer entrepriseGuid = @entrepriseGuid dans ton update et
voir
si le probleme disparait !

Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
JAMAIS
etre modifié


wrote in message
news:
source de l'erreur :
@resume text =null,

erreur :
Seuls les pointeurs de texte sont autorisés dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requêtes a fourni un plan de requête nécessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image = null,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text =null,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
logo = @logo,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
resume = @resume,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid

GO




Avatar
Med Bouchenafa
> Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
JAMAIS
etre modifié



D'où vient cette interdiction?
Pourqoui interdire ce que SQL Server a autorisé?

Voici un exemple
CREATE TABLE tblTest
(
a INT PRIMARY KEY,
b TEXT
)

INSERT INTO tblTest (a,b) VALUES(1, 'aaaaaaaaaaaa')

UPDATE tblTest SET a = 2, b= 'bbbbbbbbbbbbbb' WHERE a = 1


--
Bien cordialement
Med Bouchenafa

"SM" a écrit dans le message de news:

Je pense que SQLServer2000 ne permet pas d'updater dans une seule
operation
un clustererd index et une colonne de type text et j'imagine que
"entrepriseGuid" est un clustered index ce qui cause l'erreur,
Essaie de supprimer entrepriseGuid = @entrepriseGuid dans ton update et
voir
si le probleme disparait !

Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
JAMAIS
etre modifié


wrote in message
news:
source de l'erreur :
@resume text =null,

erreur :
Seuls les pointeurs de texte sont autorisés dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requêtes a fourni un plan de requête nécessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image = null,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text =null,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
logo = @logo,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
resume = @resume,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid

GO




Avatar
Thierry
Ce n'est pas interdit, mais déconseillé.

Généralement, on n'a besoin de faire ça que dans le cadre d'une opération de
maintenance d'une base.

--
Thierry


"Med Bouchenafa" a écrit dans le message de news:

Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
JAMAIS
etre modifié



D'où vient cette interdiction?
Pourqoui interdire ce que SQL Server a autorisé?

Voici un exemple
CREATE TABLE tblTest
(
a INT PRIMARY KEY,
b TEXT
)

INSERT INTO tblTest (a,b) VALUES(1, 'aaaaaaaaaaaa')

UPDATE tblTest SET a = 2, b= 'bbbbbbbbbbbbbb' WHERE a = 1


--
Bien cordialement
Med Bouchenafa

"SM" a écrit dans le message de news:

Je pense que SQLServer2000 ne permet pas d'updater dans une seule
operation
un clustererd index et une colonne de type text et j'imagine que
"entrepriseGuid" est un clustered index ce qui cause l'erreur,
Essaie de supprimer entrepriseGuid = @entrepriseGuid dans ton update et
voir
si le probleme disparait !

Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
JAMAIS
etre modifié


wrote in message
news:
source de l'erreur :
@resume text =null,

erreur :
Seuls les pointeurs de texte sont autorisés dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requêtes a fourni un plan de requête nécessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image = null,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text =null,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
logo = @logo,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
resume = @resume,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid

GO








Avatar
Bouarroudj Mohamed
Evidement ici l'interdiction veut dire que c'est pas une bonne pratique de
modifier la clé primaire, bien que SQL Server l'autorise

Pour le changement du text et du clustred index dans une seule operation on
peut avoir le message suivant :

"The query processor could not produce a query plan from the optimizer
because a query cannot update a text, ntext, or image column and a
clustering key at the same time"

le BOL fait reference a ce probleme, voir la commande UPDATE

"If an update query could alter more than one row while updating both the
clustering key and one or more text, image, or Unicode columns, the update
operation fails and SQL Server returns an error message."

bien que la commande "UPDATE tblTest SET a = 2, b= 'bbbbbbbbbbbbbb' WHERE a
= 1"
marche, elle PEUT generer le message cité en haut, je pense que s'arrive si
l'operation engendre un split des pages ou un transfert d'un row d'une page
a une autre



"Med Bouchenafa" wrote in message
news:
> Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
> JAMAIS
> etre modifié

D'où vient cette interdiction?
Pourqoui interdire ce que SQL Server a autorisé?

Voici un exemple
CREATE TABLE tblTest
(
a INT PRIMARY KEY,
b TEXT
)

INSERT INTO tblTest (a,b) VALUES(1, 'aaaaaaaaaaaa')

UPDATE tblTest SET a = 2, b= 'bbbbbbbbbbbbbb' WHERE a = 1


--
Bien cordialement
Med Bouchenafa

"SM" a écrit dans le message de news:

> Je pense que SQLServer2000 ne permet pas d'updater dans une seule
> operation
> un clustererd index et une colonne de type text et j'imagine que
> "entrepriseGuid" est un clustered index ce qui cause l'erreur,
> Essaie de supprimer entrepriseGuid = @entrepriseGuid dans ton update et
> voir
> si le probleme disparait !
>
> Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
> JAMAIS
> etre modifié
>
>
> wrote in message
> news:
> source de l'erreur :
> @resume text =null,
>
> erreur :
> Seuls les pointeurs de texte sont autorisés dans les tables de
> travail, jamais les colonnes text, ntext ou image. Le processeur de
> requêtes a fourni un plan de requête nécessitant une colonne text,
> ntext ou image dans une table de travail
>
> PROCEDURE :
> CREATE PROCEDURE [procEntrepriseUpdate]
> @centreGuid uniqueidentifier = null,
> @entrepriseGuid uniqueidentifier,
> @isCentre bit,
> @dateCreate datetime,
> @raisonSociale nvarchar(50),
> @logo image = null,
> @Adresse nvarchar(300),
> @telephone nvarchar(20)= null,
> @telecopie nvarchar(20) = null,
> @mobile nvarchar(20) =null,
> @email nvarchar(350) =null,
> @url nvarchar(350) = null,
> @siret nvarchar(20) =null,
> @codeNaf nvarchar(10) =null,
> @resume text =null,
> @maxSalarie int =null,
> @isActive bit,
> @activeOffReason nvarchar(300) =null,
> @isArchive bit,
> @isAbonneSms bit,
> @dateAbonneSms datetime =null,
> @nbSmsRecu int,
> @isAbonneFax bit,
> @dateAbonneFax datetime =null,
> @nbFaxRecu int,
> @baseInternetAdd bit,
> @baseInternetUpdate bit,
> @dateBaseInternet datetime =null
> AS
> IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
> = @entrepriseGuid)
> UPDATE entreprise
> SET
> centreGuid = @centreGuid,
> entrepriseGuid = @entrepriseGuid,
> isCentre = @isCentre,
> dateCreate = @dateCreate,
> raisonSociale = @raisonSociale,
> logo = @logo,
> Adresse = @Adresse,
> telephone = @telephone,
> telecopie = @telecopie,
> mobile = @mobile,
> email = @email,
> url = @url,
> siret = @siret,
> codeNaf = @codeNaf,
> resume = @resume,
> maxSalarie = @maxSalarie,
> isActive = @isActive,
> activeOffReason = @activeOffReason,
> isArchive = @isArchive,
> isAbonneSms = @isAbonneSms,
> dateAbonneSms = @dateAbonneSms,
> nbSmsRecu = @nbSmsRecu,
> isAbonneFax = @isAbonneFax,
> dateAbonneFax = @dateAbonneFax,
> nbFaxRecu = @nbFaxRecu,
> baseInternetAdd = @baseInternetAdd,
> baseInternetUpdate = @baseInternetUpdate,
> dateBaseInternet = @dateBaseInternet
> WHERE entrepriseGuid = @entrepriseGuid
>
> GO
>
>




Avatar
ucasesoftware
Voici la solution que j'ai mis en place

Frédérique tu peux me confirmer qu'elle est bonne (pour moi elle
marche en test)
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image ,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null

AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid



UPDATE entreprise
SET logo = NULL
WHERE logo IS NULL and entrepriseGuid = @entrepriseGuid

DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(entreprise.logo)
From entreprise


WHERE entrepriseGuid = @entrepriseGuid
WRITETEXT entreprise.logo @ptrval @logo

UPDATE entreprise
SET resume = NULL
WHERE resume IS NULL and entrepriseGuid = @entrepriseGuid


DECLARE @ptrvalResume binary(16)
SELECT @ptrvalResume = TEXTPTR(entreprise.resume)
From entreprise
WHERE entrepriseGuid = @entrepriseGuid
WRITETEXT entreprise.resume @ptrvalResume @resume



GO
Avatar
Med Bouchenafa
J'admets volontiers que l'on à faire cette manipulation
qu'exceptionnellement.
Mais ce n'était pas non plus mon propos
Je voulais surtout dire que c'était permis et que cela n'explique nullement
l'erreur recontrée par l'auteur du message initial

--
Bien cordialement
Med Bouchenafa


"Thierry" a écrit dans le message de news:

Ce n'est pas interdit, mais déconseillé.

Généralement, on n'a besoin de faire ça que dans le cadre d'une opération
de maintenance d'une base.

--
Thierry


"Med Bouchenafa" a écrit dans le message de news:

Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
JAMAIS
etre modifié



D'où vient cette interdiction?
Pourqoui interdire ce que SQL Server a autorisé?

Voici un exemple
CREATE TABLE tblTest
(
a INT PRIMARY KEY,
b TEXT
)

INSERT INTO tblTest (a,b) VALUES(1, 'aaaaaaaaaaaa')

UPDATE tblTest SET a = 2, b= 'bbbbbbbbbbbbbb' WHERE a = 1


--
Bien cordialement
Med Bouchenafa

"SM" a écrit dans le message de news:

Je pense que SQLServer2000 ne permet pas d'updater dans une seule
operation
un clustererd index et une colonne de type text et j'imagine que
"entrepriseGuid" est un clustered index ce qui cause l'erreur,
Essaie de supprimer entrepriseGuid = @entrepriseGuid dans ton update et
voir
si le probleme disparait !

Tu devrais jamais inclure un PK dans la clause UPDATE, un PK ne DOIT
JAMAIS
etre modifié


wrote in message
news:
source de l'erreur :
@resume text =null,

erreur :
Seuls les pointeurs de texte sont autorisés dans les tables de
travail, jamais les colonnes text, ntext ou image. Le processeur de
requêtes a fourni un plan de requête nécessitant une colonne text,
ntext ou image dans une table de travail

PROCEDURE :
CREATE PROCEDURE [procEntrepriseUpdate]
@centreGuid uniqueidentifier = null,
@entrepriseGuid uniqueidentifier,
@isCentre bit,
@dateCreate datetime,
@raisonSociale nvarchar(50),
@logo image = null,
@Adresse nvarchar(300),
@telephone nvarchar(20)= null,
@telecopie nvarchar(20) = null,
@mobile nvarchar(20) =null,
@email nvarchar(350) =null,
@url nvarchar(350) = null,
@siret nvarchar(20) =null,
@codeNaf nvarchar(10) =null,
@resume text =null,
@maxSalarie int =null,
@isActive bit,
@activeOffReason nvarchar(300) =null,
@isArchive bit,
@isAbonneSms bit,
@dateAbonneSms datetime =null,
@nbSmsRecu int,
@isAbonneFax bit,
@dateAbonneFax datetime =null,
@nbFaxRecu int,
@baseInternetAdd bit,
@baseInternetUpdate bit,
@dateBaseInternet datetime =null
AS
IF exists (SELECT entrepriseGuid FROM entreprise WHERE entrepriseGuid
= @entrepriseGuid)
UPDATE entreprise
SET
centreGuid = @centreGuid,
entrepriseGuid = @entrepriseGuid,
isCentre = @isCentre,
dateCreate = @dateCreate,
raisonSociale = @raisonSociale,
logo = @logo,
Adresse = @Adresse,
telephone = @telephone,
telecopie = @telecopie,
mobile = @mobile,
email = @email,
url = @url,
siret = @siret,
codeNaf = @codeNaf,
resume = @resume,
maxSalarie = @maxSalarie,
isActive = @isActive,
activeOffReason = @activeOffReason,
isArchive = @isArchive,
isAbonneSms = @isAbonneSms,
dateAbonneSms = @dateAbonneSms,
nbSmsRecu = @nbSmsRecu,
isAbonneFax = @isAbonneFax,
dateAbonneFax = @dateAbonneFax,
nbFaxRecu = @nbFaxRecu,
baseInternetAdd = @baseInternetAdd,
baseInternetUpdate = @baseInternetUpdate,
dateBaseInternet = @dateBaseInternet
WHERE entrepriseGuid = @entrepriseGuid

GO












1 2