Procédure stockée SQL Server création de la table temporaire et l'insertion de la valeur
Je suis en train de sélectionner les valeurs de différentes de la table et l'encart dans la table temporaire.
J'ai besoin d'une identité champ dans la table temporaire. Lorsque j'essaie d'exécuter le code suivant, il renvoie une erreur:
*Msg 2714, Niveau 16, État 1, Procédure SelectCashDetails, Ligne 27
Il y a déjà un objet nommé "#ivmy_cash_temp1 " dans la base de données.*
J'ai essayer de changer la temp de table dans des noms différents, même après il jette la même erreur.
C'est mon code:
ALTER PROCEDURE [dbo].[SelectCashDetails]
(
@trustcompanyid BigInt,
@trustaccountid BigInt,
@planid BigInt,
@fromdate varchar(20),
@todate varchar(20),
@movetype varchar(20),
@typedesc varchar(20)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
CREATE TABLE #ivmy_cash_temp1
( tmovedate datetime,
tmovedesc varchar(20),
tmoneymovetype varchar(20),
tplanbal decimal(18,6),
tsourcetype BigInt,
tdestinationtype BigInt)
SELECT
IDENTITY(int) AS id,
CMM.movedate,
CDCP.paramdesc,
CMM.movementtypecd,
CMM.amountmoved,
CMM.planbalance,
cmm.sourceaccounttypeid,
cmm.destinationaccounttypeid
into #ivmy_cash_temp1
from
cash_moneymove CMM
inner join
CDC_PARAMETERS CDCP on CMM.movedescriptioncd=CDCP.paramcd
where
CMM.movedescriptioncd = @typedesc
and PARAMNAME = 'Cash AccountType Desc'
select * from #ivmy_cash_temp1
END
Vous l'appeler plusieurs fois dans une Transaction?
N'avez-vous pas besoin de déplacer les tables temporaires après utilisation? c'est à dire à la fin de la procédure stockée?
vous n'avez pas besoin de déposer de tables temporaires à la fin de la procédure.
N'avez-vous pas besoin de déplacer les tables temporaires après utilisation? c'est à dire à la fin de la procédure stockée?
vous n'avez pas besoin de déposer de tables temporaires à la fin de la procédure.
OriginalL'auteur Ivan | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
Un
SELECT INTO
instruction crée la table pour vous. Il n'est pas nécessaire pour leCREATE TABLE
déclaration avant de la main.Ce qui se passe est que vous créez
#ivmy_cash_temp1
dans votreCREATE
l'instruction, puis l'DB tente de le créer pour vous lorsque vous faites unSELECT INTO
. Cela provoque une erreur qu'il est en train de créer une table que vous avez déjà créé.Soit d'éliminer le
CREATE TABLE
déclaration ou de modifier votre requête qui le remplit d'utiliserINSERT INTO SELECT
format.Si vous avez besoin d'un IDENTIFIANT unique ajouté à votre nouvelle ligne, alors il est préférable d'utiliser
SELECT INTO
... depuisIDENTITY()
ne fonctionne qu'avec cette syntaxe.Au lieu de faire, SÉLECTIONNEZ IDENTITÉ( int ) id de la CMM.movedate,.... DANS #ivmy_cash_temp1 etc... pour remplir votre table avec des données. Utiliser INSERT INTO #ivmy_cash_temp1 SÉLECTIONNEZ IDENTITÉ( int ) id de la CMM.movedate,.... DE etc.
merci u dave, j'ai compris....... mais quand je sélectionne les valeurs de la table temporaire il ne présente pas de valeur.........
Ne pas afficher les lignes? Ou de ne pas montrer toute la valeur de votre colonne ID?
La ferraille mon commentaire précédent. SÉLECTIONNEZ IDENTITY() ne fonctionne que lors de l'utilisation de SÉLECTIONNER DANS la syntaxe. Donc, supprimer les instructions CREATE TABLE et il suffit d'utiliser SELECT INTO.
OriginalL'auteur Dave K