Dynamic sql 在动态SQL中使用字符的困难
我正在尝试向使用动态SQL的存储过程传入@accountType,这是一个char值。它在过程中声明为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
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;