USE YOUR_DATABASE
GO
CREATE OR ALTER PROCEDURE DBO.EXAMPLE_SELECT_FROM_PROCEDURE_WITH_TEMP_TABLES
AS
BEGIN
/*
This procedure creates a simple temp table of numbers and selects from it.
This is used in an example showing how to select from a procedure that
utilizes temp tables (which is normally not possible)
*/
SET NOCOUNT ON;
BEGIN
DROP TABLE IF EXISTS #TMP;
/*Create table first, not select into, otherwise you will lock the catalog */
CREATE TABLE #TMP (RESULT_COLUMN1 INT);
END;
BEGIN
WITH CTE
AS
(SELECT
1 AS NUM
UNION ALL
SELECT
NUM + 1
FROM CTE
WHERE NUM <= 100)
INSERT INTO #TMP
SELECT
NUM AS RESULT_COLUMN1
FROM CTE;
END;
SELECT
RESULT_COLUMN1
FROM #TMP;
END;
/* Finally, using a previously established loopback linked server, we 'query' the procedure.
WITH RESULT SETS is *required* to make this work!
Details on creating a loopback linked server: https://blog.sqlauthority.com/2017/06/08/sql-server-quickest-way-add-loopback-linked-server-openquery/
*/
--this could be created as a view!
SELECT
*
FROM OPENQUERY(YOUR_DB_LOOPBACK, 'exec YOUR_DATABASE.dbo.EXAMPLE_SELECT_FROM_PROCEDURE_WITH_TEMP_TABLES WITH RESULT SETS ((RESULT_COLUMN1 INT))')
A blog to help me remember what in the hell i've done and what not to do again. ever. Maybe you'll learn from my mistakes or epiphanies. Blog topics include SQL, T-SQL, Google, Windows, Visual Basic, Python, C#, etc.
Monday, June 3, 2019
Select from stored procedure that uses temp tables
Don't do this. But if you HAVE to do this...
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment