【问题标题】:SQL Server : incorrect syntax near Tablockx . Expecting '(' or SelectSQL Server:Tablockx 附近的语法不正确。期待 '(' 或选择
【发布时间】:2018-11-05 15:42:53
【问题描述】:
CREATE PROCEDURE [lot].[wipeAll] 
    @num VARCHAR(16),
    @quotaType INT,
    @TableName NVARCHAR(128)
AS
BEGIN
    SET NOCOUNT ON;

    DELETE FROM @TableName WITH (TABLOCKX) 
    WHERE num = @num AND quotaType = @quotaType;
END

我不知道如何解决我遇到的这个错误

Tablockx 附近的语法不正确。期待 '(' 或选择

从上面的代码sn-p。任何帮助将不胜感激!

【问题讨论】:

  • 你不能这样参数化表名。
  • 这不是提示造成的,去掉它还是会失败。对象名不能使用参数,必须是动态SQL
  • 由于表名而出现问题。您正在尝试引用 SQL 无法识别的列,以便问题再次出现。给表名
  • @Halilİbrahim,删除的意义何在;从最后?问题与列无关,不是吗?
  • Nvm 在“结束”处显示错误。但在更正表名后一切正常

标签: sql-server tsql stored-procedures dynamic-sql


【解决方案1】:

您需要为此使用动态 SQL:

BEGIN
    SET NOCOUNT ON;

    DECLARE @sql NVARCHAR(MAX);

    SET @sql = '
DELETE FROM @TableName WITH (TABLOCKX) WHERE num=@num AND quotaType=@quotaType)';

    SET @sql = REPLACE(@sql, '@TableName', @TableName);

    EXEC sp_executesql @sql,
         '@num varchar(16), @quotaType int',
         @num=@num, @quotaType=quotaType
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2017-02-07
    • 2021-07-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多