2013-09-08 4 views
0

Je suis en train de créer une procédure stockée sur SQL Server 2008, je reçois une erreur:La procédure stockée donne une erreur

Msg 156, Level 15, State 1, Procedure usp_UpdateDistribiutionList, Line 12 Incorrect syntax near the keyword 'AS'.

Pouvez-vous conseiller?

Code de procédure stockée:

USE LogDB 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE usp_UpdateDistribiutionList 
-- Add the parameters for the stored procedure here 
@distId INT, 
@DistEmails varchar(max) 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 
UPDATE [NotificationDistribution] AS dist 
SET dist.emailCC = @DistEmails 
WHERE dist.DistributionID = @distId 
END 

2ème question:

est-il possible d'utiliser le paramètre pour obtenir le nom de la colonne comme dist @ columnName.?

Répondre

1

Changer votre mise à jour sur les points suivants:

UPDATE [NotificationDistribution] 
SET emailCC = @DistEmails 
WHERE DistributionID = @distId 

Si vous voulez le faire dynamique:

CREATE PROCEDURE usp_UpdateDistribiutionList 
-- Add the parameters for the stored procedure here 
@distId INT, 
@DistColumn varchar(max), 
@DistValue varchar(max) 
AS 
BEGIN 


    SET NOCOUNT ON; 

    DECLARE @SQL AS NVARCHAR(MAX) 

    SET @SQL = 
    N'UPDATE [NotificationDistribution] 
    SET ' + QuoteName(@DistColumn) + ' = @DistValue 
    WHERE DistributionID = @distId' 

    EXECUTE sp_executesql 
    @SQL, 
    N'@DistValue varchar(max), @distId INT', 
    @DistValue = @ColumnValue, 
    @distId = @distId 

END 
3

Retirez le AS dans la déclaration UPDATE, et le mettre dans la clause FROM à la place, il devrait être:

UPDATE dist 
SET dist.emailCC = @DistEmails 
FROM [NotificationDistribution] AS dist 
WHERE dist.DistributionID = @distId 

Pour votre deuxième question, vous ne pouvez pas le faire comme ça, vous avoir à le faire dynamiquement en utilisant SQL dynamique.