내가 원하는 select 문이 있습니다. 그래서 내가 열 이름의 행과 대응하는 단일 값이 나는 테이블 1 에서 특정 행입니다 값 이름이 다른 열을 만들 그러나SQL 스키마 및 값
SELECT COLUMN_NAME AS FieldName FROM
INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1'
을 선택합니다. 이것에 접근하는 방법에 대한 생각?
내가 원하는 select 문이 있습니다. 그래서 내가 열 이름의 행과 대응하는 단일 값이 나는 테이블 1 에서 특정 행입니다 값 이름이 다른 열을 만들 그러나SQL 스키마 및 값
SELECT COLUMN_NAME AS FieldName FROM
INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1'
을 선택합니다. 이것에 접근하는 방법에 대한 생각?
다음 쿼리는 각 열에 대한 값 (최소)을 생성합니다
SELECT '''select '+COLUMN_NAME+''' AS FieldName, (select cast(MIN('+COLUMN_NAME+') as varchar(8000)) from '+const.tablename+')'
FROM INFORMATION_SCHEMA.COLUMNS c cross join
(select 'AllCurveNames' as tablename) const
WHERE c.TABLE_NAME = const.tablename
그러나 이렇게하면 각 행에 대해 별도의 쿼리가 생성됩니다. 이들을 함께 결합하려면 문자열 집계 연결이 필요합니다.
declare @sql varchar(max);
SELECT @sql = (select 'select '''+COLUMN_NAME+''' AS FieldName, (select cast(MIN('+COLUMN_NAME+') as varchar(8000)) from '+const.tablename + ') union all '
FROM INFORMATION_SCHEMA.COLUMNS c cross join
(select WHATEVER as tablename) const
WHERE c.TABLE_NAME = const.tablename
for xml path('')
);
select @sql = LEFT(@sql, len(@sql) - 9);
exec(@sql);
크로스 방금없이 가입 (즉, from t1, t2
) 두 테이블에서 선택하면 암시 적 인 조인 사용
SELECT COLUMN_NAME AS FieldName,
Table1.MyField
FROM
INFORMATION_SCHEMA.COLUMNS, Table1
WHERE
TABLE_NAME = 'table1'
AND
MyTable.ID = 123
참조 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx –
내가 실제로 미친 솔루션의 비트와 함께 와서 그러나 그것은 작동합니다 : 이것은 SQL 서버에서 그것을 할 것이다 어떻게
declare @tbl_name as varchar(255)
declare @field as varchar(255)
declare @val as varchar(255)
declare @SQL as nvarchar(4000)
create table #tbl ([FieldName][varchar](255), [FieldVal][varchar](255))
set @tbl_name = 'table1'
DECLARE mah_cursor CURSOR FAST_FORWARD
FOR
SELECT COLUMN_NAME FROM
INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tbl_name
OPEN mah_cursor
FETCH NEXT FROM mah_cursor INTO @field
WHILE @@FETCH_STATUS = 0
BEGIN
set @SQL = 'set @val = (Select top 1 ' + @field + ' from ' + @tbl_name + ')'
print @SQL
exec sp_executesql @query = @SQL, @params = N'@val varchar(255) OUTPUT', @val = @val OUTPUT
insert into #tbl ([FieldName],[FieldVal]) values (@field, @val)
FETCH NEXT FROM mah_cursor INTO @field
END
CLOSE mah_cursor
DEALLOCATE mah_cursor
select * from #tbl
drop table #tbl
그것은 각각의 값을 통해 반복하고 추가합니다. Fast_Forward 기능은 쿼리를 고성능으로 최적화합니다.
table1의 "특정 행"이란 무엇입니까? SQL 쿼리에 상수를 추가 할 수 있습니다. 단지 'SELECT'Value'' –