sql - 在所有表 SQL 的一列中显示所有文本字段
问题描述
我正在尝试将所有文本字段列合并为数据库中每一行和每个表的一列。我已经为指定的表执行此操作,但我想为所有表执行此操作。
这是我到目前为止所拥有的:
DECLARE @YourTableName varchar(1000)
DECLARE @YourColumns varchar(max)
DECLARE @YourQuery varchar(max)
SET @YourTableName='COUNTRY'
SELECT
@YourColumns=STUFF(
(SELECT
'+ ''$$'' +'
+ CASE
WHEN DATA_TYPE IN ('varchar','nvarchar','text','ntext','char','nchar') THEN '''' + [COLUMN_NAME] + '@@'' + ' + 'COALESCE(CONVERT(varchar(max),' + CONVERT(varchar(max),COLUMN_NAME)+'),''NULL'')'
END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = @YourTableName
FOR XML PATH('')
), 1, 2, ''
)
SET @YourQuery = 'SELECT '+@YourColumns+' FROM '+@YourTableName
EXEC (@YourQuery)
我的输出将是这样的:
$$COUNTRY_NAME@@United States of America$$COUNTRY_CODE@@USA...
$$COUNTRY_NAME@@United Kingdom$$COUNTRY_CODE@@GBR...
$$COUNTRY_NAME@@France$$COUNTRY_CODE@@FRA...
...
我已经设置了表名,并且我想为数据库中的每个表执行这项工作,而不必指定每个表名。
解决方案
基本上你可以尝试使用以下三种方法之一:
使用 Cursor 对每个表进行迭代,在一定程度上与下面第 3 项的方式相同,但可能会带来性能问题。
使用动态 SQL 构建
@AllTables VARCHAR(MAX)
,但是会带来一个问题,如果你所有的表的总长度超过 8000,它就会不准确。使用临时表迭代每个表。
CREATE TABLE #TEMP ( TABLENAME VARCHAR(500), [COUNTER] INT IDENTITY(1,1) ) INSERT INTO #TEMP SELECT name FROM sys.tables DECLARE @YourTableName varchar(1000) DECLARE @YourColumns varchar(max) DECLARE @YourQuery varchar(max) DECLARE @Control int = 1 WHILE (@Control <= (SELECT MAX([COUNTER]) FROM #TEMP)) BEGIN SELECT @YourTableName = TABLENAME FROM #TEMP WHERE [COUNTER] = @Control SELECT @YourColumns=STUFF( (SELECT '+ ''$$'' +' + CASE WHEN DATA_TYPE IN ('varchar','nvarchar','text','ntext','char','nchar') THEN '''' + [COLUMN_NAME] + '@@'' + ' + 'COALESCE(CONVERT(varchar(max),' + CONVERT(varchar(max),COLUMN_NAME)+'),''NULL'')' END FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @YourTableName FOR XML PATH('') ), 1, 2, '' ) SET @YourQuery = 'SELECT '+@YourColumns+' FROM '+@YourTableName PRINT @YourQuery --EXEC (@YourQuery) SET @Control = @Control + 1 END
推荐阅读
- java - 对输入数字进行排序
- django - 无法运行 Django 应用程序。ERR_CONNECTION_REFUSED
- python - 使用awk将列转换为行
- python - 如何在 pandas Dataframe KeyError: False 中索引出数字的值
- python - 如何从句子中计算相同的单词?
- sql-server-2014 - 如何在 SQL Server 中显示年份中的月份数据,而输出中没有日期
- javascript - 如何从另一个页面获取 HTML 元素
- java - 每当将新文档添加到 Firestore 集合中时推送通知?
- angular - 在从组件 Angular 调用的服务方法中查找未定义
- r - R中的多边形边界插值