gpt4 book ai didi

sql - 为什么不能在动态语句中使用DB_NAME()

转载 作者:行者123 更新时间:2023-12-03 08:18:26 25 4
gpt4 key购买 nike

当我在SQL Server 2008中编写这样的SQL语句时:

exec(N'update '+DB_NAME()+'..sys_bizfiles set idtask=@newID where to_row_guid=@Lrow_guid')

剩下的是, DB_NAME()有语法错误。
DB_NAME()返回数据库名称的 nvarchar()字符串吗?怎么了?

最佳答案

EXEC 是受限产品,不接受通用表达式:在此上下文中不能使用任何函数。

{ EXEC | EXECUTE } 
( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )

也就是说,EXEC仅接受变量和字符串文字-可以将它们混合和连接。
DB_NAME()都不是这些,因此会在受限产品中导致语法错误。

例如,以下内容是有效的,因为它遵循允许的形式:
declare @name nvarchar(max) = DB_NAME()
exec('select ''' + @name + ''' as db')

(与原始代码一样, exec('select ''' + DB_NAME() + ''' as db')无效,因为 DB_NAME()既不是变量也不是字符串文字。)

关于sql - 为什么不能在动态语句中使用DB_NAME(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20781282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com