2014-09-03 3 views
0

J'essaie de transmettre @accountType, une valeur de caractère pour une procédure stockée qui utilise SQL dynamique. Il est déclaré char(4) dans la procédure. L'erreur actuelle est Incorrect syntax near 'D' si j'essaie de le changer, je reçois invalid column: D.Difficulté à utiliser un objet CHAR dans SQL dynamique

Je n'arrive pas à comprendre comment SQL dynamique veut que j'indique que la variable est un char. Je l'ai essayé plusieurs façons, voici la plus récente:

set @q = 'Update ' + @statementTable + 
    ' SET Account = '+ @padding + @accountNumber + 
    ' WHERE ClosingDate BETWEEN CAST('''+CONVERT(VARCHAR(20),@proc_dateStart)+''' AS DATE) AND CAST('''+CONVERT(VARCHAR(20),@proc_dateEnd)+''' AS DATE)' + 
    ' AND AccountType =' + ''''+ @accountType +'''' 

La valeur vient de mon code C# exactement comme ceci: D

Pas ou quoi que ce soit des guillemets simples autour de la lettre. Des idées? Je suis plus qu'un peu coincé avec ça.

Répondre

1

Quelque chose comme ceci, vous devez avoir les paramètres réellement dans l'instruction de chaîne, puis quand vous exécutez sp_executesql, vous passez ensuite ce que chacun de ces paramètres sont.

DECLARE @q VARCHAR(MAX) 
DECLARE @statementTable VARCHAR(50) 
DECLARE @padding VARCHAR(50) 
DECLARE @accountNumber CHAR(4) 
DECLARE @proc_dateStart VARCHAR(50) 
DECLARE @proc_dateEnd VARCHAR(50) 
DECLARE @accountType VARCHAR(50) 

SET @q = 'Update @statementTable 
SET Account = ''@accountNumber'' 
WHERE ClosingDate BETWEEN CAST(''+CONVERT(VARCHAR(20),@proc_dateStart)+'' AS DATE) AND CAST(''+CONVERT(VARCHAR(20),@proc_dateEnd)+'' AS DATE) 
AND AccountType = ''@accountType''' 

EXEC sys.sp_executesql @sql, N'@statementTable VARCHAR(50),@accountNumber CHAR(4),@proc_dateStart VARCHAR(50), @proc_dateEnd VARCHAR(50),@accountType VARCHAR(50)', 
    @statementTable,@accountNumber,@proc_dateStart,@proc_dateEnd,@accountType; 
Questions connexes