2016-06-02 2 views
0

datetime, date 및 time 데이터 유형이있는 sysobjects 테이블에서 최대 날짜를 찾으려고합니다.SQL 서버 - 테이블 목록에서 최대 DateTime 찾기

select so.name table_name ,sc.name column_name ,st.name data_type 
from sysobjects so 
inner join syscolumns sc on (so.id = sc.id) 
inner join systypes st on (st.type = sc.type) 
where so.type = 'U' 
and st.name IN ('DATETIME', 'DATE', 'TIME') 

가 가능 I 각 레코드의 최대 날짜를 찾을 수 있도록 쿼리를 수정 :

나는 테이블의 목록을 찾으려면 다음 쿼리를 사용? 변수를 선언하여 목록에서 열 이름을 가져 와서 max() 함수를 적용 할 수 있습니까?

+0

뭔가 간단한 것으로 그 변수를 시도해 보시지 않겠습니까? –

+0

나는 sp_executesql을 사용하여 Dynamic sql을 사용해야한다고 생각한다. https://msdn.microsoft.com/es-es/library/ms188001(v=sql.120).aspx – vercelli

답변

1

당신은 당신의 원래 쿼리 및 동적 SQL을 사용하여이를 얻을 수 있습니다

DECLARE @sql NVARCHAR(MAX); 

SELECT @sql = STUFF((
    SELECT 'UNION ALL SELECT ''' + so.name + '.' + sc.name + ''', MAX([' + sc.name + ']) FROM [' + so.name + '] ' 
    FROM  sys.sysobjects so 
    INNER JOIN sys.syscolumns sc ON (so.id = sc.id) 
    INNER JOIN sys.systypes st ON (st.xtype = sc.xtype) 
    WHERE  so.type = 'U' AND 
      st.name IN ('DATETIME', 'DATE', 'TIME') 
    FOR 
    XML PATH('') 
), 1, 9, ''); 

EXEC sp_executesql @sql; 

당신은 다음에 독서 혜택을 누릴 수 있습니다

+0

좋습니다. UNION 대신 UNION ALL을 사용할 것입니다. – vercelli

+0

좋은 지적, 답변을 업데이트하겠습니다. –

+0

이렇게하면 'syscolumns'와 'systypes'사이의 조인이 올바르지 않은 것으로 나타났습니다. 'type'에 합류하는 대신에 이것은'xtype'이어야합니다. –