TSQL Define Temp Table (or table variable) Without Defining Schema?
-
22-08-2019 - |
Question
Is there a way to define a temp table without defining it's schema up front?
Solution
Actually using a table VARIABLE, an in-memory table, is the optimal way to go. The #table creates a table in temp db, and ##table is global - both with disk hits. Consider the slow-down/hit experienced with the number of transactions.
CREATE PROCEDURE [dbo].[GetAccounts]
@AccountID BIGINT,
@Result INT OUT,
@ErrorMessage VARCHAR(255) OUT
AS
BEGIN
SET NOCOUNT ON;
SET @Result = 0
SET @ErrorMessage = ''
DECLARE @tmp_Accounts TABLE (
AccountId BIGINT,
AccountName VARCHAR(50),
...
)
INSERT INTO @tmp_Accounts ([AccountId], [AccountName]...
)
SELECT AccountID, AccountName
FROM Accounts
WHERE ...
IF @@Rowcount = 0
BEGIN
SET @ErrorMessage = 'No accounts found.'
SET @Result = 0
RETURN @Result
END
ELSE
BEGIN
SET @Result = 1
SELECT *
FROM @tmp_Accounts
END
Note the way you insert into this temp table.
The down-side of this is that it may take a bit longer to write, as you have to define your table variable.
I'd also recommend SQL Prompt for Query Analyzer by RedGate.
OTHER TIPS
you don't need OPENQUERY. Just put "INTO #AnyTableName" between the select list and the FROM of any query...
SELECT *
INTO #Temp1
FROM table1
WHERE x=y
Yes, you can create it with
SELECT INTO ...
Let's say
SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow