· 7 years ago · Sep 21, 2018, 09:16 AM
1CREATE PROCEDURE UniqueVal AS
2BEGIN
3 DECLARE @ColumnName varchar(50)
4
5 IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='UniqueCount' AND xtype='U')
6 CREATE TABLE UniqueCount (
7 Name NVARCHAR(64) NOT NULL,
8 UniqueAmount Int Not null
9 )
10TRUNCATE TABLE UniqueCount;
11DECLARE @Count int
12
13DECLARE MY_CURSOR CURSOR
14LOCAL STATIC READ_ONLY FORWARD_ONLY
15FOR
16SELECT COLUMN_NAME
17FROM footballlab.INFORMATION_SCHEMA.COLUMNS
18WHERE TABLE_NAME = 'Players'
19OPEN MY_CURSOR
20FETCH NEXT FROM MY_CURSOR INTO @ColumnName
21 WHILE @@FETCH_STATUS = 0
22 BEGIN
23 SELECT @Count = COUNT(DISTINCT @ColumnName)
24 From Players
25 INSERT INTO UniqueCount(Name,UniqueAmount)
26 VALUES(@ColumnName, @Count);
27 FETCH NEXT FROM MY_CURSOR INTO @ColumnName
28 END
29CLOSE MY_CURSOR
30DEALLOCATE MY_CURSOR
31END;
32
33-- Заполним @Count
34
35DECLARE @SQL_Script nvarchar(max)
36
37SELECT @SQL_Script = 'SELECT @Count = COUNT (DISTINCT '+@ColumnName+') FROM [Players]'
38
39EXEC sp_executesql @SQL_Script, N'@Count int out', @Count out
40
41SELECT @Count