SQL 命令名称是数据库名称;使用动态 SQL?

SQL Command Name is Database Name; Use Dynamic SQL?

我有一个名为 "Union" 的数据库。我正在尝试在 MAINT table 中为此数据库执行 SQL,但由于 'union' 是一个 SQL 命令,它会抛出错误。从 Union 数据库执行时,我可以获得对 运行 的查询。动态 SQL 能否解决我的问题,还是我应该更改数据库名称?

关键字 'UNION' 附近的语法一直不正确

     DECLARE @sql varchar(max)
DECLARE @Database varchar(5)
Set @Database = 'UNION'


SELECT @sql = 'SELECT '+@Database+' as ''Database'', '+@Database+'.hsi.useraccount.username  as ''User Name'', 
'+@Database+'.hsi.useraccount.realname as ''Real Name''
FROM '+@Database+'.hsi.useraccount
WHERE '+@Database+'.hsi.useraccount.username NOT LIKE ''%deactivated%'' and '+@Database+'.hsi.useraccount.username not like ''%administrator'' and '+@Database+'.hsi.useraccount.username not like ''%internal%'''

execute(@sql)

在架构名称周围添加 [] 方括号。

SELECT @sql = REPLACE('SELECT [@Database] as ''Database'', [@Database].hsi.useraccount.username  as ''User Name'', 
[@Database].hsi.useraccount.realname as ''Real Name''
FROM [@Database].hsi.useraccount
WHERE [@Database].hsi.useraccount.username NOT LIKE ''%deactivated%'' and [@Database].hsi.useraccount.username not like ''%administrator'' and [@Database].hsi.useraccount.username not like ''%internal%'''
,'@Database',@Database)

只要文本“@Database”文本没有出现在您的 select 语句中的其他任何地方,只需将其放入 REPLACE() 函数即可避免所有嵌入式引号语法和字符串连接问题.

您也可以使用 quotename 而不是手动输入方括号

declare @db nvarchar(100)
set @db='performance'

declare  @sql nvarchar(max)
set @sql='select * from '+QUOTENAME(@db)+'.'+quotename('dbo')+'.'+QUOTENAME('orders')
print @sql

exec(@sql)