Knowing a table’s creation date is crucial for auditing, compliance, and system maintenance. In this article, I’ll share the four most reliable methods I use to determine when SQL Server tables were created, techniques that have helped me troubleshoot issues for many clients.
How to Check Table Creation Date in SQL Server
Before diving into the specific methods, it’s essential to understand how SQL Server tracks object creation information. Unlike some database systems that maintain explicit creation timestamps, SQL Server stores this metadata in system catalog views and tables.
SQL Server maintains metadata about database objects in several key system views:
sys.objects: Contains basic information about all database objectssys.tables: Specific information about user tablessys.all_objects: Information about all objects including system objectsINFORMATION_SCHEMA.TABLES: ANSI-standard view for table information
Method 1: Using sys.objects System View (Most Reliable)
The sys.objects system view is my go-to method for checking table creation dates. This approach has proven reliable across SQL Server versions from 2008 to 2022, and I’ve used it successfully in many environments.
Basic Query Structure
-- Method 1: Basic table creation date query
SELECT
name AS TableName,
create_date AS CreationDate,
modify_date AS LastModifiedDate,
type_desc AS ObjectType
FROM sys.objects
WHERE type = 'U' -- 'U' represents User Tables
ORDER BY create_date DESC;After executing the above query, I got the expected output as shown in the screenshot below.

Enhanced Query with Additional Details
-- Enhanced version with schema information
SELECT
s.name AS SchemaName,
t.name AS TableName,
t.create_date AS CreationDate,
t.modify_date AS LastModifiedDate,
t.object_id AS ObjectID
FROM sys.objects t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.type = 'U'
ORDER BY t.create_date DESC;After executing the above query, I got the expected output as shown in the screenshot below.

Benefits of Method 1
- High Accuracy: Direct access to SQL Server’s internal metadata
- Version Compatibility: Works across all modern SQL Server versions
- Performance: Fast execution even on databases with thousands of tables
- Comprehensive Information: Provides both creation and modification dates
Method 2: Using sys.tables System View
The sys.tables view provides a more focused approach, specifically targeting user tables.
-- Method 2: Using sys.tables for user tables only
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS TableName,
create_date AS CreationDate,
modify_date AS LastModifiedDate,
DATEDIFF(day, create_date, GETDATE()) AS DaysOld
FROM sys.tables
ORDER BY create_date DESC;After executing the above query, I got the expected output as shown in the screenshot below.

Advanced Filtering Options
-- Filter tables created within specific date range
DECLARE @StartDate DATE = '2023-01-01';
DECLARE @EndDate DATE = '2023-12-31';
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS TableName,
create_date AS CreationDate,
modify_date AS LastModifiedDate,
CASE
WHEN DATEDIFF(day, create_date, GETDATE()) <= 30 THEN 'Recently Created'
WHEN DATEDIFF(day, create_date, GETDATE()) <= 90 THEN 'Created in Last Quarter'
ELSE 'Older Table'
END AS AgeCategory
FROM sys.tables
WHERE create_date BETWEEN @StartDate AND @EndDate
ORDER BY create_date DESC;After executing the above query, I got the expected output as shown in the screenshot below.

Method 3: Using INFORMATION_SCHEMA.TABLES (ANSI Standard)
For organizations requiring ANSI SQL compliance, the INFORMATION_SCHEMA.TABLES view provides a standardized approach. I’ve implemented this method for clients with multi-database environments spanning SQL Server, Oracle, and PostgreSQL systems.
Important Limitation: INFORMATION_SCHEMA.TABLES doesn’t include creation date information directly, but we can combine it with sys.objects for a hybrid approach.
-- Method 3: ANSI standard approach with creation date
SELECT
ist.TABLE_SCHEMA,
ist.TABLE_NAME,
ist.TABLE_TYPE,
so.create_date AS CreationDate,
so.modify_date AS LastModifiedDate
FROM INFORMATION_SCHEMA.TABLES ist
INNER JOIN sys.objects so ON so.name = ist.TABLE_NAME
INNER JOIN sys.schemas ss ON so.schema_id = ss.schema_id
AND ss.name = ist.TABLE_SCHEMA
WHERE ist.TABLE_TYPE = 'BASE TABLE'
ORDER BY so.create_date DESC;After executing the above query, I got the expected output as shown in the screenshot below.

Cross-Database Compatibility Benefits
| Database System | INFORMATION_SCHEMA Support | Creation Date Available |
|---|---|---|
| SQL Server | Yes | Via sys.objects join |
| Oracle | Yes | Via user_objects |
| PostgreSQL | Yes | Via pg_class |
| MySQL | Yes | Via information_schema.tables |
Method 4: Checking Specific Table Creation Date
When troubleshooting specific issues, you often need to check a single table’s creation date quickly.
-- Method 4: Check specific table creation date
DECLARE @TableName NVARCHAR(128) = 'Customers'; -- Replace with your table name
DECLARE @SchemaName NVARCHAR(128) = 'dbo'; -- Replace with your schema name
SELECT
@SchemaName AS SchemaName,
@TableName AS TableName,
create_date AS CreationDate,
modify_date AS LastModifiedDate,
DATEDIFF(day, create_date, GETDATE()) AS DaysOld,
DATEDIFF(hour, create_date, GETDATE()) AS HoursOld
FROM sys.objects
WHERE name = @TableName
AND schema_id = SCHEMA_ID(@SchemaName)
AND type = 'U';After executing the above query, I got the expected output as shown in the screenshot below.

Dynamic Query for Multiple Tables
-- Check multiple specific tables
DECLARE @TableList TABLE (TableName NVARCHAR(128));
INSERT INTO @TableList VALUES
('Customers'),
('Orders'),
('Products'),
('Employees');
SELECT
s.name AS SchemaName,
o.name AS TableName,
o.create_date AS CreationDate,
o.modify_date AS LastModifiedDate,
DATEDIFF(day, o.create_date, GETDATE()) AS DaysOld
FROM sys.objects o
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN @TableList tl ON o.name = tl.TableName
WHERE o.type = 'U'
ORDER BY o.create_date DESC;After executing the above query, I got the expected output as shown in the screenshot below.

Conclusion:
After describe you through fourcomprehensive methods to check table creation dates in SQL Server—from basic sys.objects queries to advanced enterprise reporting solutions—you now possess the best knowledge to achieve this.
Key Method Summary
Choose the right approach for your needs:
- Method 1 (sys.objects): Most reliable for general use and cross-version compatibility
- Method 2 (sys.tables): Best for focusing specifically on user tables
- Method 3 (INFORMATION_SCHEMA): Ideal for ANSI compliance requirements
- Method 4 (Specific tables): Perfect for targeted troubleshooting and investigation
- Method 5 (Advanced reporting): Essential for enterprise auditing and compliance
Implementation Best Practices
Remember these critical points:
- Always include both creation and modification dates for comprehensive tracking
- Implement proper error handling and permission checks in production scripts
- Use parameterized queries and stored procedures for recurring monitoring tasks
- Establish automated alerting for unauthorized table creation activities
- Maintain audit trails for regulated environments requiring compliance documentation
You may also like the following articles
- Get Stored Procedure List in SQL Server by Modified Date
- SQL Server Last Login Date for User
- Get Financial Year from Current Date in SQL Server
After working for more than 15 years in the Software field, especially in Microsoft technologies, I have decided to share my expert knowledge of SQL Server. Check out all the SQL Server and related database tutorials I have shared here. Most of the readers are from countries like the United States of America, the United Kingdom, New Zealand, Australia, Canada, etc. I am also a Microsoft MVP. Check out more here.