У меня есть запрос ниже, который дает количество различных значений для каждого столбца.Но мне нужно добавить условие запроса where в запрос, например column1 = 'abc'.Я использую этот общий запрос, чтобы можно было использовать тот же запрос с другими таблицами, также передав имя таблицы.
DECLARE @query VARCHAR(MAX)
SELECT @query =
'SELECT ' + SUBSTRING((SELECT ',' +'COUNT(DISTINCT(' + column_name + ')) AS ' + column_name + ' '
FROM information_schema.columns
WHERE table_name = 'table_name'
FOR XML PAT('')), 2, 100000) + 'FROM table_name'
--PRINT(@query)
EXECUTE(@query)
Я попытался передать его, как показано ниже.
WHERE
table_name = 'table_name'
AND column1 = 'abc' -- compilation error, obviously
WHERE
table_name = 'table_name'
AND 'column1' = 'abc' -- not working, because it will compare the string values column1 and abc. and both are not equal
ЗатемЯ только что попробовал следующий запрос, но он также не работает, он генерирует неверный запрос при попытке печати.
DECLARE @SQL NVARCHAR(MAX), @tname NVARCHAR(100),
@cname NVARCHAR(100), @acc_num NVARCHAR(50), @dp_code NVARCHAR(100)
SET @cname = 'column_name';
SET @acc_num = 'xyz';
SET @tname = 'table_name';
DECLARE @query VARCHAR(MAX);
SET @SQL = ''
;with cols as (
select Table_Schema, Table_Name, Column_Name, Row_Number() over(partition by Table_Schema, Table_Name
order by ORDINAL_POSITION) as RowNum
from INFORMATION_SCHEMA.COLUMNS
)
SELECT @query =
'SELECT ' + SUBSTRING((SELECT ',' +'COUNT(DISTINCT(' + QUOTENAME(column_name, '') + ')) As ' + QUOTENAME(column_name, '')+ ' '
+ ' WHERE ' + 'column_name' + ' = ''' + @acc_num + ''''
FROM cols
WHERE
table_name = @tname
for xml path('')),2,200000) + 'FROM' @tname
--for xml path('');
PRINT @query
--execute (@query)