SA0263 : Temporary table is used before it has any data inserted |
![]() |
Ensure that temporary tables are properly inserted with data before they are referenced or queried.

Temporary tables are often created for intermediate data storage during complex data processing tasks. A typical problem arises when a temporary table is queried before it has been populated with data. This can lead to runtime errors or unexpected results in SQL Server, as the temporary table might not yet contain any data.
For example:
1-- Example of problematic query 2CREATE TABLE #TempTable (ID INT); 3SELECT * FROM #TempTable; 4INSERT INTO #TempTable (ID) VALUES (1);
The above example is problematic because it attempts to select data from the temporary table #TempTable before any data has been inserted into it. This usage pattern can lead to logical errors or misleading results in applications relying on immediate data availability.
-
Temporary tables must be populated with initial data before being used in SELECT queries.
-
Referencing an empty or unpopulated temporary table can cause issues with data integrity and logic in applications.

Ensure that temporary tables have been populated with data before they are used in queries.
Follow these steps to address the issue:
-
Review the T-SQL script to identify the creation and usage of the temporary table. Use CREATE TABLE statement to define the temporary table structure first.
-
Ensure that data is inserted into the temporary table before attempting to use it in a SELECT query. You can use the INSERT INTO statement to add data.
-
Verify that all SELECT statements querying the temporary table occur after the INSERT INTO statement.
For example:
1-- Example of corrected query 2CREATE TABLE #TempTable (ID INT); 3INSERT INTO #TempTable (ID) VALUES (1); 4SELECT * FROM #TempTable;

The rule has a Batch scope and is applied only on the SQL script.

Rule has no parameters.

The rule does not need Analysis Context or SQL Connection.


Design Rules, Bugs

There is no additional info for this rule.

SQL
1CREATE TABLE #mail 2( 3 toAddress NVARCHAR( 100 ) , 4 fromAddres NVARCHAR( 100 ) , 5 subject NVARCHAR( 256 ) , 6 body NVARCHAR( 4000 ) 7); 8 9SELECT * FROM #mail 10 11DELETE FROM #mail 12UPDATE #mail set toAddress ='' 13 14INSERT INTO #mail 15SELECT * from mail 16 17SELECT * FROM #mail |

Message | Line | Column | |
---|---|---|---|
1 | SA0263 : Temporary table is used before it has any data inserted. | 9 | 14 |
2 | SA0263 : Temporary table is used before it has any data inserted. | 11 | 12 |
3 | SA0263 : Temporary table is used before it has any data inserted. | 12 | 7 |
