对数据构型的小测试

这篇博客探讨了数据构型在SQL查询中的使用,通过两种状态(使用和不使用数据构型)进行对比测试。内容包括执行SHAPE和APPEND语句,以及比较数据构型与传统查询的效率和实用性。作者指出,虽然数据构型在特定场景下可能有用,但在大多数情况下,他们倾向于使用联合查询和其他方法来达到相同效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

状态一 使用数据构型

<!-- METADATA TYPE="TypeLib" UUID="00000200-0000-0010-8000-00AA006D2EA4" -->
<%
Set Connection = Server.CreateObject("ADODB.Connection")
ConnectionString = "Provider=MSDataShape;DATA PROVIDER=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=123;Initial Catalog=Northwind;Data Source=(local)"
Connection.Open(ConnectionString)

SQL = _
"SHAPE {SELECT CustomerID FROM Customers} "&_
"APPEND ({SELECT OrderID,CustomerID FROM Orders} AS chapOrders "&_
"RELATE customerID TO customerID)"

Set Rs = Connection.Execute(SQL)

Do While not Rs.Eof
Response.Write(Rs(0) &" - "& Rs.Fields.Count)
Response.Write("<br>")
  Set RsChild = Rs("chapOrders").Value
  Do While Not RsChild.EOF
    Response.Write( RsChild(0) &" "& RsChild(1) &" - "& RsChild.Fields.Count)
    Response.Write("<br>")
  RsChild.MoveNext
  Loop
  RsChild.Close
Rs.MoveNext
Loop

Set RsChild = Nothing
Rs.Close
Set Rs = Nothing
Connection.Close
Set Connection = Nothing
%>

发送如下 SQL
SET NO_BROWSETABLE ON
go
declare @P1 int
set @P1=1
exec sp_prepare @P1 output, NULL, N'SELECT OrderID,CustomerID FROM Orders', 1
select @P1
go
SET NO_BROWSETABLE OFF
go
SELECT CustomerID FROM Customers;SELECT OrderID,CustomerID FROM Orders
go
SET NO_BROWSETABLE ON
go
exec sp_unprepare 1
go



状态二 不使用数据构型

<!-- METADATA TYPE="TypeLib" UUID="00000200-0000-0010-8000-00AA006D2EA4" -->
<%
Set Connection = Server.CreateObject("ADODB.Connection")
ConnectionString = "PROVIDER=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=123;Initial Catalog=Northwind;Data Source=(local)"
Connection.Open(ConnectionString)

SQL = "SELECT Customers.CustomerID, Orders.OrderID, Orders.CustomerID FROM [Customers],[Orders] WHERE Customers.CustomerID=Orders.CustomerID"

Set Rs = Connection.Execute(SQL)

Do While not Rs.Eof
Response.Write(Rs(0) &" - "& Rs.Fields.Count)
Response.Write("<br>")
Rs.MoveNext
Loop

Rs.Close
Set Rs = Nothing
Connection.Close
Set Connection = Nothing
%>

发送如下 SQL
exec sp_reset_connection
go
SELECT Customers.CustomerID, Orders.OrderID, Orders.CustomerID FROM [Customers],[Orders] WHERE Customers.CustomerID=Orders.CustomerID
go


效率就不用说了 总体来说 感觉使用性不是很大 分类和论坛结构上可能用到上
当效率是很大的问题 我宁愿使用联合查询 配合其他方法实现同样效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值