Dynamic sql 在动态SQL中使用字符的困难

Dynamic sql 在动态SQL中使用字符的困难,dynamic-sql,Dynamic Sql,我正在尝试向使用动态SQL的存储过程传入@accountType,这是一个char值。它在过程中声明为char(4)。当前错误是“D”附近的语法不正确如果我尝试更改它,我会得到无效列:D 我无法理解动态SQL希望我如何指示变量是char。我尝试过很多方法,以下是最新的: set @q = 'Update ' + @statementTable + ' SET Account = '+ @padding + @accountNumber + ' WHERE ClosingDat

我正在尝试向使用动态SQL的存储过程传入@accountType,这是一个char值。它在过程中声明为
char(4)
。当前错误是“D”附近的
语法不正确
如果我尝试更改它,我会得到
无效列:D

我无法理解动态SQL希望我如何指示变量是char。我尝试过很多方法,以下是最新的:

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


信中没有单引号或任何东西。有什么想法吗?我有点受不了了

类似这样,您需要在string语句中实际包含参数,然后在执行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;