【问题标题】:Incorrect Syntax Near @ThisDB [duplicate]@ThisDB 附近的语法不正确 [重复]
【发布时间】:2020-01-14 19:35:51
【问题描述】:

我正在尝试更改数据库的架构,通常,我只需将变量替换为数据库名称即可解决此问题。但是,我正在尝试检查它自己在哪个数据库上运行。

我已经在其他数据库上运行过它,它可以工作。但是,由于某种原因,一些数据库会在错误之后抛出。

“@ThisDB”附近的语法错误

--Set current DB as @ThisDB
DECLARE @ThisDB NVARCHAR(50)
SET @ThisDB = DB_NAME()
--Change Schema of @ThisDB
USE @ThisDB -- <= Error occurs here
DROP SCHEMA @ThisDB
DROP USER @ThisDB
ALTER AUTHORIZATION ON DATABASE::@ThisDB TO @ThisDB

老实说,我很确定这里的代码是正确的。因为我知道它在其他数据库上运行。

我的问题是为什么它不能在某些数据库上运行。

【问题讨论】:

    标签: sql-server variables


    【解决方案1】:

    USE 语句后面只能跟一个标识符。不能在USE 语句之后放置变量。

    USE (Transact-SQL)

    一般来说,您不能只用变量替换对象标识符,因此它也不适用于您的 drop 和 alter 语句。

    您可能必须使用动态 SQL 之类的东西,使用 sp_executesqlEXEC 语句来完成您想要的。

    【讨论】:

    • 因此,如果我试图从直接查询中运行它,而不是从主查询或 TempDB 查询中运行。我需要使用吗?
    • 另外,不要问问题,你能简单解释一下什么是动态SQL吗?
    • 没问题 :) 如果您查看 sp_executesql 或 EXEC 语句,您将看到如何将文本字符串发送到查询引擎。您可以使用所需的对象名称构建一个字符串。只需在互联网上搜索“Dynamic Sql”即可。
    • @RedGrinGrumble 查看我在上面发布的重复链接,它向您展示了如何做到这一点。
    猜你喜欢
    • 2016-03-21
    • 2019-03-08
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多