对某些数据库名称的SQL查询
我目前在一台服务器上有许多数据库。我只想在以“AccountsLive”结尾的数据库上运行查询 并不是所有的都以这个结尾,所以我想做一个通配符%AccountsLive查询,而不是在('master','tempdb','model','msdb')中使用对某些数据库名称的SQL查询,sql,sql-server,Sql,Sql Server,我目前在一台服务器上有许多数据库。我只想在以“AccountsLive”结尾的数据库上运行查询 并不是所有的都以这个结尾,所以我想做一个通配符%AccountsLive查询,而不是在('master','tempdb','model','msdb')中使用WHERE-Not-name('master','tempdb','model','msdb') 这可能吗 以下是我目前拥有的代码: DECLARE @Sql NVARCHAR(MAX) = NULL; SELECT @Sql = COAL
WHERE-Not-name('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表(dbname sysname)
插入@table(dbname)
从sys.databases中选择名称,其中的名称类似于“%AccountsLive”
声明@Sql NVARCHAR(MAX)=NULL;
选择@Sql=COALESCE(@Sql+'UNION ALL'+CHAR(13)+CHAR(10),'')+'SELECT*FROM'+QUOTENAME(dbname)+'.dbo.SL_事务'
来自@table
EXEC(@Sql);
您可以将表名列表放入表变量中,并相应地查询它们。我还将模式添加为dbo
,以使名称成为由三部分组成的名称,假设表位于dbo
模式中
DECLARE@table表(dbname sysname)
插入@table(dbname)
从sys.databases中选择名称,其中的名称类似于“%AccountsLive”
声明@Sql NVARCHAR(MAX)=NULL;
选择@Sql=COALESCE(@Sql+'UNION ALL'+CHAR(13)+CHAR(10),'')+'SELECT*FROM'+QUOTENAME(dbname)+'.dbo.SL_事务'
来自@table
EXEC(@Sql);
你有没有尝试过像“%AccountsLive”这样的[name]的位置?没有,我没有尝试,因为我是个白痴!!非常感谢。你有没有试过像“%AccountsLive”这样的[name]的地方?
?没有,我没有试过,因为我是个白痴!!非常感谢。太好了,谢谢!实际上,我在这个问题上遇到了一个错误:无法执行varchar值到varchar的隐式转换,因为在UNION ALL运算符中,由于“SQL\u Latin1\u General\u CP1\u CI\u AS”和“Latin1\u General\u CI\u AS”之间的排序冲突,无法解决该值的排序问题。
有什么想法吗?@PeterK,你能单独提个问题吗。在不同的数据库中,不同的排序规则似乎存在一些问题。请填写查询并添加单独的问题。这是不同的错误。啊,对不起,我想可能与此有关-可以@彼得,没问题。当然,太好了,谢谢你!实际上,我在这个问题上遇到了一个错误:无法执行varchar值到varchar的隐式转换,因为在UNION ALL运算符中,由于“SQL\u Latin1\u General\u CP1\u CI\u AS”和“Latin1\u General\u CI\u AS”之间的排序冲突,无法解决该值的排序问题。
有什么想法吗?@PeterK,你能单独提个问题吗。在不同的数据库中,不同的排序规则似乎存在一些问题。请填写查询并添加单独的问题。这是不同的错误。啊,对不起,我想可能与此有关-可以@彼得,没问题。当然