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
>
>
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" <com.hotmail@bouchenafa> wrote in message
news:utp7vw84FHA.3292@tk2msftngp13.phx.gbl...
> 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" <sauvemark@yahoo.com> a écrit dans le message de news:
eOma9V74FHA.3188@TK2MSFTNGP15.phx.gbl...
> 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é
>
>
> <ucasesoftware@hotmail.fr> wrote in message
> news:1131107063.802108.269640@g44g2000cwa.googlegroups.com...
> 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
>
>
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
>
>
From entreprise
From entreprise
From entreprise
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 ?
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 ?
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 ?
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
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
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
From entreprise
From entreprise
From entreprise
>>sinon cafonctionnerai pas...
>>sinon cafonctionnerai pas...
>>sinon cafonctionnerai pas...