Как можно получить четкие данные всех столбцов таблицы в результирующем наборе результатов в SQL - PullRequest
0 голосов
/ 07 апреля 2020

Я создал хранимую процедуру для получения разных данных всех столбцов. Но я должен указать каждое имя столбца соответствующей таблицы.

Bur Я не хочу указывать имя каждого столбца таблицы и получать отдельные данные всех столбцов в отдельном наборе результатов.

+----+------+---------+-----------+
| 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     |
+-----------+

Теперь я хочу сделать это динамически без указания имен столбцов.

Пожалуйста, предоставьте мне любую помощь по этому вопросу.

1 Ответ

0 голосов
/ 07 апреля 2020

Для этого можно использовать запрос ниже.

НАСТРОЙКА ТЕСТА

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   |
+-----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...