AT-*_*017 1 sql sql-server stored-procedures hashtable sql-server-2008
在过去的几天里,我一直在阅读一本关于数据结构的电子书,坦率地说,许多事情已经从我的脑海里消失了.只是审查它们并试图再次澄清.我正在浏览哈希表并再次熟悉它.所以我知道并且听说过,SQL Server在内部使用散列表,stackoverflow.com和forums.asp.net的许多线程询问在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
Run Code Online (Sandbox Code Playgroud)
另一个例子,在存储过程中说,哈希表不能使用.所以这是:
第二:
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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,我可以说第一个是哈希表的一个例子,因为它使用临时表,如果没有,为什么我们不能在存储过程中使用它?同样,如果它是在内部创建的,为什么我们需要再次为工作目的创建一个哈希表(虽然它有性能问题,只是想知道上面的例子是否用于此目的).谢谢.
注意:我上个月接受了一次采访,正在讨论它.这就是为什么要确保我的观点是否正确.
| 归档时间: |
|
| 查看次数: |
15893 次 |
| 最近记录: |