如何在SQL的明示结果集中获取表中所有列的不同数据

问题描述 投票:-1回答:1

我创建了一个存储过程来获取所有列的不同数据。但是我必须指定相应表的每个列名称。

Bur我不想指定表的每个列名并获取separte结果集中所有columnn的不同数据。

This is my Table named "table1"

这是我的存储过程的代码,用于获取每列的不同结果集

create proc sp_task1  @table varchar(20)
as
begin
exec('
select distinct id FROM ' +@table+'
')
exec('
select distinct name FROM ' +@table+'
')
exec('
select distinct address FROM ' +@table+'
')
exec('
select distinct city FROM ' +@table+'
')
end
exec sp_task1 @table = 'table1'

This is what I get in result when I Execute the SP

现在,我想动态地执行此操作而不指定列名。

请就此问题给我任何帮助。

sql-server tsql stored-procedures dynamic-sql
1个回答
0
投票

您可以使用下面的查询来执行此操作。

测试设置

CREATE TABLE Test(id int, name varchar(20), city varchar(20));

INSERT INTO Test
values(1,'abc','chennai'),
(2,'abc','bangalore');
CREATE PROCEDURE USP_GetDistinct(@TableName SYSNAME,@TableSchema SYSNAME )
AS
BEGIN
    DECLARE @SQL NVARCHAR(MAX)

    SET @SQL = (
    SELECT 'SELECT  DISTINCT ' + 
    Column_Name + 
           ' FROM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(Table_Name) + CHAR(13)+ CHAR(10) + 'GO'+CHAR(13)+ CHAR(10)
    FROM INFORMATION_SCHEMA.COLUMNS C
    WHERE TABLE_NAME = @TableName AND table_schema = @TableSchema      
    FOR XML PATH(''), Type
    ).value('.', 'varchar(max)')

    --PRINT @SQL

    EXECUTE (@SQL)
END

执行过程

EXEC USP_GetDistinct @TableName='Test', @TableSchema='dbo'

结果集

+----+
| id |
+----+
|  1 |
|  2 |
+----+

+------+
| name |
+------+
| abc  |
+------+


+-----------+
|   city    |
+-----------+
| bangalore |
| chennai   |
+-----------+
© www.soinside.com 2019 - 2024. All rights reserved.