각 열 이름에 대한 데이터 샘플과 함께 테이블의 모든 열을 나열하는 쿼리를 작성 중입니다. 예를 들어 'first', 'last'및 'age'열이있는 'person'이라는 테이블이있는 경우 다음과 같이 나열해야합니다.
table_name column_name column_value
person person_id 443
person first john
person last smith
person age 48
이 쿼리의 목표는 실제로 주어진 테이블의 모든 열을 나열하는 것입니다. 세 번째 열 (column_value)에 데이터 값을 나열하여 백엔드에 대해 애플리케이션의 프런트 엔드를 확인하고 실제로 올바른 열을 처리하고 있는지 확인할 수 있습니다.
이 테이블에는 수백 또는 수천 개의 레코드가있을 수 있지만 일치하는 레코드 하나만 가져 오려고합니다. 주어진 테이블에서 작업중인 평균 테이블 열은 200 개 이상이므로 수동으로이 작업을 수행 할 수 없습니다.
다음은 테이블에서 모든 열을 가져 오는 데 사용하는 쿼리입니다.
SELECT table_name
, COLUMN_NAME
, '' AS column_value
FROM information_schema.COLUMNS
WHERE TABLE_NAME LIKE '%person%'
ORDER BY TABLE_NAME
이 쿼리는 다음 결과를 반환합니다 (column_value가 비어 있음에 유의).
table_name column_name column_value
person person_id
person first
person last
person age
고유 한 기본 키를 사용하여 가져올 단일 개인 레코드를 식별합니다. 이렇게하면 열 이름이 반복되지 않습니다 (예 : 개인을 가져올 때마다 사람 _ID / 이름 / 성 / 연령이 반복됨).
질문은 'column_value'열에서 선택한 특정 레코드의 값과 함께 열 목록으로 어떻게 변환합니까?
명확히하기 위해 기본적으로 이러한 유형의 쿼리 및 출력을 설정하려고합니다.
SELECT * FROM person WHERE person_id = 443;
** outputs this:
person_id first last age
443 john smith 48
이것으로 :
table_name column_name column_value
person person_id 443
person first john
person last smith
person age 48
이런 식으로 시도해 볼 수 있습니다.
DECLARE @SchemaName sysname
DECLARE @TableName sysname
DECLARE @Colname sysname
DECLARE @SQL_Template nvarchar(max)
DECLARE @SQL nvarchar(max)
SET @SchemaName = 'Sales'
SET @TableName = 'Customer'
CREATE TABLE ##Results(Colname sysname, colvalue varchar(256))
SET @SQL_Template = 'INSERT INTO ##Results(Colname,colvalue ) SELECT top 1 ''@Colname '' as Colname,'
+ ' CONVERT(nvarchar(256),@Colname) AS ColValue'
+ ' FROM ['+@SchemaName+'].['+@TableName+']'
DECLARE COL_CURSOR CURSOR STATIC FOR
SELECT c.name
FROM sys.schemas s
JOIN sys.tables t ON t.schema_id = s.schema_id
JOIN sys.columns c ON c.object_id = t.object_id
WHERE s.name = 'Sales' AND t.name = 'Customer'
OPEN COL_CURSOR
FETCH NEXT FROM COL_CURSOR INTO @Colname
WHILE @@FETCH_STATUS =0
BEGIN
SET @SQL = REPLACE(@SQL_Template,'@ColName',@ColName)
PRINT @SQL
EXEC sp_executesql @SQL
FETCH NEXT FROM COL_CURSOR INTO @Colname
END
CLOSE COL_CURSOR
DEALLOCATE COL_CURSOR
SELECT * FROM ##Results
DROP TABLE ##Results
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다