· 7 years ago · Sep 21, 2018, 08:56 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-- Положим Ð¸Ð¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ в переменную @TableName
34
35DECLARE @TableName nvarchar(max)
36
37SELECT TOP(1) @TableName = TABLE_NAME
38FROM footballlab.INFORMATION_SCHEMA.COLUMNS
39WHERE TABLE_NAME = 'Players'
40
41-- Заполним @Count
42
43DECLARE @SQL_Script nvarchar(max)
44
45SELECT @SQL_Script = 'SELECT @Count = COUNT (DISTINCT '+@ColumnName+') FROM ' + @TableName
46
47EXEC sp_executesql @SQL_Script, N'@Count int out', @Count out
48
49SELECT @Count