我目前在一台服务器上有许多数据库。我想只对以"AccountsLive"结尾的数据库运行查询。
并不是所有的都以这个结尾,所以我想使用通配符%AccountsLive查询而不使用WHERE NOT name IN('master', 'tempdb', 'model', 'msdb')
这可能吗?
下面是我目前的代码:
DECLARE @Sql NVARCHAR(MAX) = NULL;
SELECT @Sql = COALESCE(@Sql + ' UNION ALL ' + CHAR(13) + CHAR(10), '' ) + 'SELECT * FROM ' + QUOTENAME([name]) + '.SL_TRANSACTIONS'
FROM sys.databases
WHERE not [name] in ('master', 'tempdb', 'model', 'msdb');
EXECUTE ( @Sql );
您可以将表名列表放在表变量中并相应地查询它们。我还将模式添加为dbo
,以使名称成为三部分名称,假设表在dbo
模式中。
DECLARE @table table(dbname sysname)
INSERT INTO @table(dbname)
SELECT NAME FROm sys.databases where name like '%AccountsLive'
DECLARE @Sql NVARCHAR(MAX) = NULL;
SELECT @Sql = COALESCE(@Sql + ' UNION ALL ' + CHAR(13) + CHAR(10), '' ) + 'SELECT * FROM ' + QUOTENAME(dbname) + '.dbo.SL_TRANSACTIONS'
FROM @table
EXEC( @Sql );