2014-09-03 3 views
0

Я пытаюсь передать в @accountType, значение char для хранимой процедуры, использующей динамический SQL. В процедуре объявляется char(4). Текущая ошибка Incorrect syntax near 'D', если я попытаюсь ее изменить, я получаю invalid column: D.Сложность с использованием CHAR в динамическом SQL

Я не могу понять, как динамический SQL хочет, чтобы я указал, что переменная является символом. Я пробовал это много способов, вот самый последнее:

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 +'''' 

Значения исходит из моих C# код в точности так: D

одинарных кавычек или что-нибудь вокруг буквы. Есть идеи? Я немного застрял в этом.

ответ

1

Что-то вроде этого, вам нужно иметь параметры на самом деле в строковом выражении, затем, когда вы выполняете sp_executesql, вы затем передаете каждый из этих параметров.

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; 
Смежные вопросы