sql-server - 在所有数据库上查询 INFORMATION_SCHEMA.COLUMNS?
问题描述
有没有办法在所有数据库中查询 INFORMATION_SCHEMA.COLUMNS ?看来USE db
必须指定。
我试过这个,但在使用 PowerShell 时它什么也不返回Invoke-Sqlcmd
。
IF DB_ID('db') IS NOT NULL
BEGIN
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE 'BID_BY_CPT_SPECIAL'
ORDER BY TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,ORDINAL_POSITION
;
END
此查询在 PowerShell 脚本中使用。
$q = @"
DROP TABLE IF EXISTS #Temp;
SELECT DatabaseName=cast('' as varchar(100))
, TABLE_NAME
, COLUMN_NAME
, DATA_TYPE
, ORDINAL_POSITION
Into #Temp
FROM INFORMATION_SCHEMA.COLUMNS
Where 1=0
Declare @SQL varchar(max) = '
USE ? ;
Insert Into #Temp
SELECT DatabaseName=''?''
, TABLE_NAME
, COLUMN_NAME
, DATA_TYPE
, ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE ''BID_BY_CPT_SPECIAL''
ORDER BY TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,ORDINAL_POSITION
'
EXEC sp_MSforeachdb @SQL
Select * From #Temp
"@
foreach ($db in $DatabaseInstances) {
$r = Invoke-Sqlcmd -Query $q -ServerInstance $db
=== 更新
此查询正在使用Invoke-Sqlcmd
.
$q = @"
DROP TABLE IF EXISTS #Temp;
SELECT DatabaseName=cast('' as varchar(100))
,TABLE_NAME
,COLUMN_NAME
,DATA_TYPE
,ORDINAL_POSITION
,CHARACTER_MAXIMUM_LENGTH
,NUMERIC_PRECISION
,NUMERIC_SCALE
,IS_NULLABLE
Into #Temp
FROM INFORMATION_SCHEMA.COLUMNS
Where 1=0
Declare @SQL varchar(max) = '
USE ? ;
Insert Into #Temp
SELECT DatabaseName=''?''
,TABLE_NAME
,COLUMN_NAME
,DATA_TYPE
,ORDINAL_POSITION
,CHARACTER_MAXIMUM_LENGTH
,NUMERIC_PRECISION
,NUMERIC_SCALE
,IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE ''$TableName''
ORDER BY TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,ORDINAL_POSITION
'
EXEC sp_MSforeachdb @SQL
Select * From #Temp
"@
解决方案
看看sp_MSforeachdb
这会将数据收集到一个临时表中。就个人而言,我会把你WHERE
带到决赛SELECT
例子
SELECT DatabaseName=cast('' as varchar(100))
, TABLE_NAME
, COLUMN_NAME
, DATA_TYPE
, ORDINAL_POSITION
Into #Temp
FROM INFORMATION_SCHEMA.COLUMNS
Where 1=0
Declare @SQL varchar(max) = '
USE ? ;
Insert Into #Temp
SELECT DatabaseName=''?''
, TABLE_NAME
, COLUMN_NAME
, DATA_TYPE
, ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE ''BID_BY_CPT_SPECIAL''
ORDER BY TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,ORDINAL_POSITION
'
EXEC sp_MSforeachdb @SQL
Select * From #Temp
推荐阅读
- iot - IoT 代理配置
- python - 是否可以循环 10^8 种可能性来确定正确答案?
- java - 配置问题:找不到 XML 模式命名空间的 Spring NamespaceHandler
- node.js - 为 Node 模块导入 TS 类型
- angularjs - 带有引导崩溃的嵌套 ng-repeats,$index 和 ng-init 的问题
- javascript - 复制到剪贴板时如何添加新行
- javascript - 我想在 Object 中返回异步函数的值
- google-apps-script - 用户无权调用 showModalDialog()
- hive - 使用 sqoop 将数据从 CSV 导入 Avro 表的命令
- android - Android - 运行时的 Dagger 注入