3

我使用 SQL Server 2016。

我需要在服务器上的所有数据库中查找表名和列名。

DECLARE @SQL NVARCHAR(max)

SET @SQL = STUFF((
            SELECT '
UNION
SELECT ' + quotename(NAME, '''') + ' as Db_Name, t.Name collate SQL_Latin1_General_CP1_CI_AS as Table_Name,
c.Name as Column_Name
FROM ' + quotename(NAME) + '.sys.tables as t 
INNER JOIN ' + quotename(NAME) + '.sys.columns as c ON t.object_id = c.object_id
WHERE t.NAME LIKE ''%'' + @TableName + ''%'' 
AND c.NAME LIKE ''%'' + @ColumnName + ''%'' '  
            FROM sys.databases
            ORDER BY NAME
            FOR XML PATH('')
                ,type
            ).value('.', 'nvarchar(max)'), 1, 8, '')

--PRINT @SQL;

EXECUTE sp_executeSQL @SQL
    ,N'@TableName varchar(30), @ColumnName varchar(30)'
    ,@TableName = 'Bid'
    ,@ColumnName = 'bidid'

我收到此错误

无法解决 UNION 操作中“Latin1_General_100_CI_AS_KS_WS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。

按照这个线程:

无法解决排序规则冲突?

我尝试通过添加到我的内部联接或 where 子句将 collat​​e 设置为“DATABASE_DEFAULT”,但这并没有解决错误。

4

1 回答 1

3

通过添加到选择列表排序规则如下:“ ,c.Name collate SQL_Latin1_General_CP1_CI_AS as Column_Name”它工作得很好

于 2018-04-23T04:04:00.760 回答