Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL Server从每个表和每个列中获取不同的值_Sql_Sql Server_Tsql_Distinct_Each - Fatal编程技术网

使用SQL Server从每个表和每个列中获取不同的值

使用SQL Server从每个表和每个列中获取不同的值,sql,sql-server,tsql,distinct,each,Sql,Sql Server,Tsql,Distinct,Each,我想对给定数据库的每个表进行循环,以获得每个char字段的唯一值 我的问题可能类似于: for each table: for each row in table: select distinct char_field from table loop loop 我该怎么做?像这样试试看 DECLARE cur CURSOR FOR SELECT 'SELECT DISTINCT ' + QUOTENAME(c.COLUMN_NAME) + '

我想对给定数据库的每个表进行循环,以获得每个char字段的唯一值

我的问题可能类似于:

for each table:
    for each row in table:
       select distinct char_field
       from table
    loop
loop
我该怎么做?

像这样试试看

DECLARE cur CURSOR FOR
    SELECT 'SELECT DISTINCT ' + QUOTENAME(c.COLUMN_NAME) + 'AS ' + QUOTENAME(TABLE_CATALOG + '.' + TABLE_SCHEMA + '.' + TABLE_NAME) + ' FROM ' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
    FROM INFORMATION_SCHEMA.COLUMNS AS c
    WHERE c.DATA_TYPE LIKE '%char%' 

DECLARE @cmd VARCHAR(MAX);
OPEN cur;

FETCH NEXT FROM cur INTO @cmd;
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @cmd
    EXEC(@cmd);
    FETCH NEXT FROM cur INTO @cmd;
END

CLOSE cur;
DEALLOCATE cur;
此过程打开一个包含所有表的所有列的游标,其中数据类型包含
char
。它将创建一个语句来选择所有不同的值,并一个接一个地执行

像这样试试看

DECLARE cur CURSOR FOR
    SELECT 'SELECT DISTINCT ' + QUOTENAME(c.COLUMN_NAME) + 'AS ' + QUOTENAME(TABLE_CATALOG + '.' + TABLE_SCHEMA + '.' + TABLE_NAME) + ' FROM ' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
    FROM INFORMATION_SCHEMA.COLUMNS AS c
    WHERE c.DATA_TYPE LIKE '%char%' 

DECLARE @cmd VARCHAR(MAX);
OPEN cur;

FETCH NEXT FROM cur INTO @cmd;
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @cmd
    EXEC(@cmd);
    FETCH NEXT FROM cur INTO @cmd;
END

CLOSE cur;
DEALLOCATE cur;

此过程打开一个包含所有表的所有列的游标,其中数据类型包含
char
。它将创建一个语句来选择所有不同的值,并一个接一个地执行

添加一些数据和必需的输出,以便更好地理解场景并提供问题的最佳解决方案。添加一些数据和必需的输出,以便更好地理解场景并提供问题的最佳解决方案。