J'ai une procédure stockée qui ressemble à ce qui suit, ci-dessous. Ce qui arrive, c'est que ça m'échoue quand je cours. Je l'ai réduit lorsque je tente de mettre à jour la syntaxe AGENT STATE, par exemple. QUAND PropertyDefinitionID = @passStatePropertyDefID ALORS @passState - état de l'agentClarification - Utilisation de la mise à jour TSQL
ALTER procedure [dbo].[usp_UpdateProfile]
@passCompanyName varchar(100),
@passFName varchar(50),
@passLName varchar(50),
@passEmail varchar(50),
@passStreet varchar(50),
@passCity varchar(50),
@passState int,
@passZip varchar(10),
@passPhone varchar(15),
@passUserID int
As
Begin
Declare @passCompanyNamePropertyDefID int
Declare @passFNamePropertyDefID int
Declare @passLNamePropertyDefID int
Declare @passEmailPropertyDefID int
Declare @passStreetPropertyDefID int
Declare @passCityPropertyDefID int
Declare @passStatePropertyDefID int
Declare @passPostalPropertyDefID int
Declare @passPhonePropertyDefID int
Declare @passACURefID int
Set @passCompanyNamePropertyDefID = 62 -- Local PropertyDefinitionID from server : Agent Company Name
Set @passFNamePropertyDefID = 61 -- Local PropertyDefinitionID from server : Agent First Name
Set @passLNamePropertyDefID = 63 -- Local PropertyDefinitionID from server : Agent Last Name
Set @passEmailPropertyDefID = 64 -- Local PropertyDefinitionID from server : Agent Email
Set @passStreetPropertyDefID = 65 -- Local PropertyDefinitionID from server : Agent Street
Set @passCityPropertyDefID = 66 -- Local PropertyDefinitionID from server : Agent City
Set @passStatePropertyDefID = 72 -- Local PropertyDefinitionID from server : Agent State
Set @passPostalPropertyDefID = 67 -- Local PropertyDefinitionID from server : Agent State
Set @passPhonePropertyDefID = 68 -- Local PropertyDefinitionID from server: Agent Telephone
If(Exists(Select UserID From AgentCompanyUser Where UserID = @passUserID))
Begin
-- Modify First Name and Last Name in AgentCompanyUser table --
Update AgentCompanyUser Set Agent_FirstName = @passFName, Agent_LastName = @passLName Where UserID = @passUserID
End
-- Modify Email Address in dnn_Users table --
Update dnn_Users Set Email = @passEmail Where UserID = @passUserID
-- Retreive ACU_RefID from AgentCompanyUser table --
Set @passACURefID = (Select ACU_RefID from AgentCompanyUser Where UserID = @passUserID)
-- UPDATE COMPANY WITH AGENT - AGENT PROFILE SECTION
Update dnn_UserProfile
Set PropertyValue = CASE WHEN PropertyDefinitionID = @passFNamePropertyDefID THEN @passFName -- Agent First Name
WHEN PropertyDefinitionID = @passLNamePropertyDefID THEN @passLName -- Agent Last Name
WHEN PropertyDefinitionID = @passEmailPropertyDefID THEN @passEmail -- Agent Email
WHEN PropertyDefinitionID = @passStreetPropertyDefID THEN @passStreet -- Agent Street
WHEN PropertyDefinitionID = @passCityPropertyDefID THEN @passCity -- Agent City
WHEN PropertyDefinitionID = @passStatePropertyDefID THEN @passState -- Agent State
WHEN PropertyDefinitionID = @passPostalPropertyDefID THEN @passZip -- Agent Postal
WHEN PropertyDefinitionID = @passPhonePropertyDefID THEN @passPhone -- Agent Phone
END
WHERE PropertyDefinitionID IN (@passFNamePropertyDefID, @passLNamePropertyDefID, @passEmailPropertyDefID, @passStreetPropertyDefID, @passCityPropertyDefID, @passStatePropertyDefID, @passPostalPropertyDefID, @passPhonePropertyDefID)
AND UserID IN (
SELECT B.UserID
FROM CompanyAuthorizeAgent AS B
INNER JOIN AgentCompanyUser AS A ON A.ACU_RefID = B.FK_acu_RefID
WHERE A.ACU_RefID = @passACURefID)
End
Mais si modifier le code pour séparer le code qui me cause des problèmes. Ça marche. Le code ci-dessous modify, vous verrez que je crée une autre mise à jour:
ALTER procedure [dbo].[usp_UpdateProfile]
@passCompanyName varchar(100),
@passFName varchar(50),
@passLName varchar(50),
@passEmail varchar(50),
@passStreet varchar(50),
@passCity varchar(50),
@passState int,
@passZip varchar(10),
@passPhone varchar(15),
@passUserID int
As
Begin
Declare @passCompanyNamePropertyDefID int
Declare @passFNamePropertyDefID int
Declare @passLNamePropertyDefID int
Declare @passEmailPropertyDefID int
Declare @passStreetPropertyDefID int
Declare @passCityPropertyDefID int
Declare @passStatePropertyDefID int
Declare @passPostalPropertyDefID int
Declare @passPhonePropertyDefID int
Declare @passACURefID int
Set @passCompanyNamePropertyDefID = 62 -- Local PropertyDefinitionID from server : Agent Company Name
Set @passFNamePropertyDefID = 61 -- Local PropertyDefinitionID from server : Agent First Name
Set @passLNamePropertyDefID = 63 -- Local PropertyDefinitionID from server : Agent Last Name
Set @passEmailPropertyDefID = 64 -- Local PropertyDefinitionID from server : Agent Email
Set @passStreetPropertyDefID = 65 -- Local PropertyDefinitionID from server : Agent Street
Set @passCityPropertyDefID = 66 -- Local PropertyDefinitionID from server : Agent City
Set @passStatePropertyDefID = 72 -- Local PropertyDefinitionID from server : Agent State
Set @passPostalPropertyDefID = 67 -- Local PropertyDefinitionID from server : Agent State
Set @passPhonePropertyDefID = 68 -- Local PropertyDefinitionID from server: Agent Telephone
If(Exists(Select UserID From AgentCompanyUser Where UserID = @passUserID))
Begin
-- Modify First Name and Last Name in AgentCompanyUser table --
Update AgentCompanyUser Set Agent_FirstName = @passFName, Agent_LastName = @passLName Where UserID = @passUserID
End
-- Modify Email Address in dnn_Users table --
Update dnn_Users Set Email = @passEmail Where UserID = @passUserID
-- Retreive ACU_RefID from AgentCompanyUser table --
Set @passACURefID = (Select ACU_RefID from AgentCompanyUser Where UserID = @passUserID)
-- UPDATE COMPANY WITH AGENT - AGENT PROFILE SECTION
Update dnn_UserProfile
Set PropertyValue = CASE WHEN PropertyDefinitionID = @passFNamePropertyDefID THEN @passFName -- Agent First Name
WHEN PropertyDefinitionID = @passLNamePropertyDefID THEN @passLName -- Agent Last Name
WHEN PropertyDefinitionID = @passEmailPropertyDefID THEN @passEmail -- Agent Email
WHEN PropertyDefinitionID = @passStreetPropertyDefID THEN @passStreet -- Agent Street
WHEN PropertyDefinitionID = @passCityPropertyDefID THEN @passCity -- Agent City
WHEN PropertyDefinitionID = @passPostalPropertyDefID THEN @passZip -- Agent Postal
WHEN PropertyDefinitionID = @passPhonePropertyDefID THEN @passPhone -- Agent Phone
END
WHERE PropertyDefinitionID IN (@passFNamePropertyDefID, @passLNamePropertyDefID, @passEmailPropertyDefID, @passStreetPropertyDefID, @passCityPropertyDefID, @passPostalPropertyDefID, @passPhonePropertyDefID)
AND UserID IN (
SELECT B.UserID
FROM CompanyAuthorizeAgent AS B
INNER JOIN AgentCompanyUser AS A ON A.ACU_RefID = B.FK_acu_RefID
WHERE A.ACU_RefID = @passACURefID)
-- UPDATE COMPANY WITH AGENT - AGENT PROFILE SECTION (Add 2nd Update)
Update dnn_UserProfile
Set PropertyValue = CASE WHEN PropertyDefinitionID = @passStatePropertyDefID THEN @passState-- Agent State
END
WHERE PropertyDefinitionID IN (@passStatePropertyDefID)
AND UserID IN (
SELECT B.UserID
FROM CompanyAuthorizeAgent AS B
INNER JOIN AgentCompanyUser AS A ON A.ACU_RefID = B.FK_acu_RefID
WHERE A.ACU_RefID = @passACURefID)
End
Ma question est pourquoi dois-je créer une autre mise à jour au lieu d'utiliser mon code d'origine pour faire ce travail?
Merci d'avance.
"il échoue sur moi" - échoue comment? –
Dans la syntaxe UPDATE d'origine, tous les paramètres transmis ne sont pas mis à jour respectivement. Mais pour une raison quelconque, si je crée deux mises à jour, tous les enregistrements sont mis à jour. La différence des paramètres passés à la mise à jour est VARCHAR mais celle qui semble provoquer un conflit dans la mise à jour est une INT –
Avez-vous vérifié que vous n'avez pas d'espaces de fin sur vos paramètres varchar passés? ajouter ltrim (rtrim()) à tous les contrôles de paramètres (et le champ de la table, éventuellement) dans votre déclaration de cas et voir si cela fonctionne ... –