【问题标题】:Incorrect syntax near 'in''in' 附近的语法不正确
【发布时间】:2021-05-21 12:23:42
【问题描述】:

为什么我会在此处收到带有以下内容的错误声明? 'in' 附近的语法不正确?

INSERT INTO Staging.dbo.progress execute('SELECT ID
    FROM Staging.dbo.tempstudents WHERE StartTerm in' + @progressReportTerm);

【问题讨论】:

标签: sql sql-server-2016


【解决方案1】:

假设您使用的是 SQL Server,execute 不接受表达式。所以需要事先构造查询:

declare @sql nvarchar(max);

select @sql = '
SELECT ID
FROM Staging.dbo.tempstudents
WHERE StartTerm in ' + @progressReportTerm;

INSERT INTO ODS_Staging.dbo.progress
    exec(@sql);

您无疑有充分的理由在这里使用动态 SQL。但是,这可能不是真正的要求。并且动态 SQL 可能会引入 SQL 注入风险。这肯定会导致难以调试的语法错误。

【讨论】:

  • 别这样,不是它可能会被注射,它会。使用表表参数。
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 2013-12-16
  • 1970-01-01
  • 2018-08-14
  • 2011-03-11
  • 2014-02-16
  • 2017-01-11
  • 2020-02-06
相关资源
最近更新 更多