La Table de hachage de la Structure de Données dans SQL Server

Depuis quelques jours, j'ai été lire un ebook sur les structures de données et bien, franchement, beaucoup de choses sont déjà parti de ma tête. Juste le temps de les examiner et d'essayer de faire effacer à nouveau. J'ai été en passant par les tables de hachage et obtenir familier avec elle à nouveau. Donc, je sais et entendu, SQL Server utilise des tables de hachage interne et beaucoup de fils de stackoverflow.com et forums.asp.net interrogé sur la création de tables de hachage dans SQL Server comme il stocke temporairement les données. Alors laissez-moi vous donner un exemple que j'ai utilisé dans une procédure stockée à l'aide de la table temporaire: (à Éviter et il est trop long. Juste pour un exemple)

1er:

CREATE PROCEDURE [dbo].[Orders]
@OrderLine int
AS
BEGIN
DECLARE @t1 TABLE(Date1 date, 
OrderID VARCHAR(MAX), 
EmployeeName VARCHAR(MAX), 
DeliveryDate date, 
StoreName VARCHAR(MAX),
DeliveryAddress VARCHAR(MAX), 
ItemName VARCHAR(MAX), 
Quantity FLOAT)
INSERT INTO @t1(Date1, OrderID, EmployeeName, DeliveryDate, StoreName, DeliveryAddress, ItemName, Quantity)
(SELECT DISTINCT 
CONVERT(VARCHAR(11), DemandOrder.POCreationDate, 6) AS DemandOrderDate, 
DemandOrder.OrderID, EmployeeDetails.EmployeeName,
CONVERT(DATE, DemandOrder.DeliveryDate) AS ExpectedDeliveryDate, 
StoreDetails.StoreName,
DemandOrder.DeliveryAddress, Item.ItemName, 
DemandOrderLine.Quantity 
FROM 
DemandOrder 
INNER JOIN 
DemandOrderLine ON DemandOrder.OrderID = DemandOrderLine.OrderID 
INNER JOIN 
Item on DemandOrderLine.ItemID=Item.ItemID 
INNER JOIN 
EmployeeDetails ON EmployeeDetails.EmployeeID = DemandOrder.EmployeeID 
INNER JOIN 
StoreDetails ON DemandOrderLine.StoreID = StoreDetails.StoreID
WHERE 
DemandOrderLine.OrderLine = @OrderLine)
DECLARE @t2 TABLE(Approvedby VARCHAR(MAX)) 
INSERT INTO @t2(Approvedby)
(SELECT EmployeeDetails.EmployeeName 
FROM EmployeeDetails 
INNER JOIN DemandOrderLine ON DemandOrderLine.ApprovedBy = EmployeeDetails.EmployeeID)
SELECT DISTINCT 
CONVERT(VARCHAR(11), Date1, 6) AS Date, 
OrderID, EmployeeName,
CONVERT(VARCHAR(11), DeliveryDate, 6) AS ExpectedDeliveryDate, 
StoreName, Approvedby, DeliveryAddress, 
ItemName, Quantity  
FROM 
@t1 
CROSS JOIN 
@t2
END   

Un autre, à partir d'un exemple, qui dit que dans une procédure stockée, les tables de hachage ne peut pas être utilisé. Donc, ici, c'est:

2e:

CREATE PROCEDURE TempTable AS ---- It's actually not possible in SP
CREATE table #Color
(
Color varchar(10) PRIMARY key
)
INSERT INTO #color 
SELECT 'Red' 
UNION 
SELECT 'White'
UNION 
SELECT 'green'
UNION 
SELECT 'Yellow'
UNION 
SELECT 'blue'
DROP TABLE #color
CREATE table #Color
(
Color varchar(10) PRIMARY key
)
INSERT INTO #color 
SELECT 'Red' 
UNION 
SELECT 'White'
UNION 
SELECT 'green'
UNION 
SELECT 'Yellow'
UNION 
SELECT 'blue'
DROP TABLE #color
GO

Donc ma question est ce que je peux dire que le 1er est un exemple de table de hachage qu'il utilise des tables temporaires et si non, pourquoi ne pouvons-nous pas l'utiliser dans la procédure stockée? Encore une fois, si c'est à l'interne, ce pourquoi nous avons besoin de créer une table de hachage de nouveau pour travailler les fins (même s'il a des problèmes de performances, demandais juste pour savoir si les exemples ci-dessus servent à cet effet). Merci.

Remarque: j'ai fait face à une interview le mois dernier et a été de discuter de ce sujet. C'est la raison pour laquelle assurez-vous si j'ai été correct dans mes vues.

  • Je pense que vous pourriez avoir une certaine confusion entre les tables de hachage et des tables préfixées avec le # (hash) symbole? Ces derniers sont rien à voir avec l'informatique table de hachage. C'est juste une appellation exigence pour les tables temporaires locales.
InformationsquelleAutor AT-2017 | 2017-01-01