В течение последних нескольких дней я читал электронную книгу о структурах данных, и, честно говоря, многие вещи уже исчезли из моей головы. Просто просмотрите их и повторите попытку. Я проходил через хэш-таблицы и снова знаком с ним. Поэтому я знаю и слышу, SQL Server использует хеш-таблицы внутри, а многие потоки stackoverflow.com и forums.asp.net задают вопрос о создании хеш-таблиц в SQL Server, поскольку он хранит временные данные. Итак, позвольте мне привести пример, который я использовал в хранимой процедуре, используя временную таблицу: (Избегайте его, и это слишком долго просто для примера.)Структура данных таблицы хэшей в SQL Server
первый:
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
Еще один, из примера, который хранится в хранимой процедуре, хеш-таблицы не могут использоваться. Так вот это:
второй:
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
Так что мой вопрос я могу сказать, что первый из них является примером хэш-таблицы, как он использует временные таблицы, и если нет, то почему мы не можем использовать это в хранимой процедуре? Опять же, если он создается внутренне, зачем нам снова создавать хэш-таблицу для рабочих целей (хотя у нее есть проблемы с производительностью, просто интересно узнать, служат ли эти примеры для этой цели). Благодарю.
Примечание: Я столкнулся с интервью в прошлом месяце и обсуждал его. Вот почему я уверен, что был прав в своих взглядах.
Я думаю, что у вас может быть некоторая путаница между хеш-таблицами и таблицами с префиксом символа '#' [(hash)] (https://en.m.wikipedia.org/wiki/Number_sign)? Последние не имеют ничего общего с хэш-таблицей компьютерных наук. Это просто требование именования локальных временных таблиц. –