TSQL Définir le tableau Temp (ou variable de table) sans définir le schéma?
-
22-08-2019 - |
Question
Est-il possible de définir une table temporaire sans le définir est le schéma à l'avant?
La solution
En fait, en utilisant une variable de table, une table en mémoire, est la meilleure façon d'aller. Le #table crée une table temporaire db et ## table est globale - à la fois avec des hits de disque. Considérons le ralentissement / hit connu avec le nombre de 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
Notez la façon dont vous insérez dans ce tableau temp.
Le bas-côté de ceci est que cela peut prendre un peu plus de temps pour écrire, comme vous devez définir votre variable de table.
Je vous recommande également SQL Prompt pour Analyseur de requêtes par Redgate.
Autres conseils
vous n'avez pas besoin OPENQUERY. Il suffit de mettre « dans #AnyTableName » entre la liste de sélection et la requête de toute ...
SELECT *
INTO #Temp1
FROM table1
WHERE x=y
Oui, vous pouvez créer avec
SELECT INTO ...
Disons que
SELECT * INTO #t
FROM OPENQUERY( 'server',
'exec database.dbo.proc_name value1, value2, ... ' )