如何在 SQL 中的单独结果集中获取 table 中所有列的不同数据
How can to get distinct data of all the columns in a table in spearte result set in SQL
我创建了一个存储过程来获取所有列的不同数据。但我必须指定各自 table.
的每个列名
但是我不想指定 table 的每个列名称并获取单独结果集中所有列的不同数据。
+----+------+---------+-----------+
| Id | name | Address | City |
+----+------+---------+-----------+
| 1 | A | Max | Rajasthan |
| 2 | A | Min | Delhi |
| 1 | A | Max | Rajathan |
| 1 | A | Min | UP |
+----+------+---------+-----------+
这是我的存储过程代码,用于获取每列的不同结果集
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'
这是我执行 SP 时得到的结果。
+----+
| id |
+----+
| 1 |
| 2 |
+----+
+------+
| name |
+------+
| A |
+------+
+---------+
| Address |
+---------+
| Max |
| Min |
+---------+
+-----------+
| city |
+-----------+
| Rajasthan |
| Delhi |
+-----------+
现在,我想在不指定列名的情况下动态执行此操作。
请就此问题给我任何帮助。
您可以使用以下查询来执行此操作。
测试设置
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 |
+-----------+
我创建了一个存储过程来获取所有列的不同数据。但我必须指定各自 table.
的每个列名但是我不想指定 table 的每个列名称并获取单独结果集中所有列的不同数据。
+----+------+---------+-----------+
| Id | name | Address | City |
+----+------+---------+-----------+
| 1 | A | Max | Rajasthan |
| 2 | A | Min | Delhi |
| 1 | A | Max | Rajathan |
| 1 | A | Min | UP |
+----+------+---------+-----------+
这是我的存储过程代码,用于获取每列的不同结果集
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'
这是我执行 SP 时得到的结果。
+----+
| id |
+----+
| 1 |
| 2 |
+----+
+------+
| name |
+------+
| A |
+------+
+---------+
| Address |
+---------+
| Max |
| Min |
+---------+
+-----------+
| city |
+-----------+
| Rajasthan |
| Delhi |
+-----------+
现在,我想在不指定列名的情况下动态执行此操作。
请就此问题给我任何帮助。
您可以使用以下查询来执行此操作。
测试设置
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 |
+-----------+