【发布时间】:2014-01-30 22:58:27
【问题描述】:
我正在执行以下 sql。我收到一个语法错误('=' 附近的语法不正确) 查询执行良好,并在正常执行时给出正确的结果。无法理解。请看一下。
DECLARE @pvchMachineId VARCHAR(100) = ''
DECLARE @pvchMake VARCHAR(100) = ''
DECLARE @sql NVARCHAR(1000)
SELECT @sql = ' SELECT TOP 20 x.intId, x.vchMachineId, x.AUDenom, x.intGroupId,
x.vchMake, x.vchModel, x.mCurrency
from dbo.Machine x
inner join
(select max(m1.AUDenom) as audenom, m1.vchMachineId
from dbo.Machine m1
left JOIN dbo.ImportedFile ife on m1.intImportedFileId = ife.intId
WHERE ife.dtFileDate >= ''1-1-2013'' AND ife.dtFileDate <= ''1-29-2014'' AND
--following two lines cause the error
(' + @pvchMake + '= ''0'' OR m1.vchMake = @pvchMake) AND
(' + @pvchMachineId +'= ''0'' OR m1.vchMachineId = @pvchMachineId)
group by vchMachineId) y
on x.AUDenom = y.audenom and x.vchMachineId = y.vchMachineId
ORDER BY x.AUDenom DESC'
【问题讨论】:
-
你的变量的值是多少?
-
你是如何传递这些参数来执行语句的?
-
您能否显示查询的非动态版本。这有助于理解您的意思。
-
检查动态sql的最好方法是在最后一行使用SELECT @sql
-
sql 中带有
--的注释在行结束时结束。动态sql也是一样。
标签: sql sql-server tsql