0

我先打个招呼吧!在过去的几个月里,这个论坛对我帮助很大,但现在才加入并提出我的第一个问题。我正在使用 SQL Server 2008 r2 中的 Northwind 数据库来构建 vb.net 应用程序。一个星期以来,我一直在绞尽脑汁想弄清楚如何制作订单/发票表格。我可以使用单独的存储过程(GetCustInfo、GetOrderInfo、GetProductInfo 或类似的东西)获取我需要显示的信息,但我无法弄清楚如何在表单上显示它们。当我在一个 sp 中选择我需要的所有信息时(如在 db 中内置的 Invoice 视图中),我得到 2155 行,这是公司历史记录中已订购的项目数。我想要做的是显示这些信息,但是通过 OrderID 导航(这会给我 830 行,每个都有一定数量的与 OrderID 相关的产品)。所以我想我需要不同的相关存储过程,这些过程可以以某种方式相关。我真的很感激可以在这方面提供的任何帮助。

提前谢谢了。

ps 我有随 Access 一起提供的 Northwind 示例应用程序的屏幕截图,这确实是我试图在 SQL Server 中重新创建的内容。不幸的是,没有代码!毫米

4

2 回答 2

0

是的,您可以通过多种方式实现它,而 SP 就是其中之一。只需创建一个 SP 以选择将 OrderId 作为输入参数传递的相关产品。

于 2013-12-12T15:28:54.527 回答
0

一些选项(带有人为的示例):

您可以ALTER现有的存储过程来获得您想要的(如果您想将现有的过程用于其他查询,则不推荐)。

ALTER PROCEDURE usp_ExistingProcedure
AS
BEGIN

SELECT t1.Value
, t2.Value
-- Supose that this was the addition we made to an existing stored procedure
, t2.ValueTwo
FROM TableOne t1
INNER JOIN TableTwo t2 ON t1.ID = t2.ID

END

您可以CREATE为您的查询创建新的存储过程;在上面的示例中,它将是一个具有新名称的创建过程。

您也许可以创建一个VIEW来获得您需要的东西 - 这将有点不同。

CREATE VIEW uv_ApplicationView
AS

SELECT t1.Value
    , t2.Value
    , t2.ValueTwo
    FROM TableOne t1
    INNER JOIN TableTwo t2 ON t1.ID = t2.ID

您可以直接从VB应用程序中提取查询,但如果您想将其重用于其他用途,我不推荐这种方法。

//  A re-usable approach calling a stored procedure
SqlCommand myQuery = new SqlCommand("EXECUTE usp_myQuery", sqlConn);

//  A query directly in the C# code:
string msQuery = "SELECT t1.Value, t2.Value, t2.ValueTwo FROM TableOne t1 INNER JOIN TableTwo t2 ON t1.ID = t2.ID"
// Later ...
SqlCommand myQuery = new SqlCommand(msQuery, sqlConn);
于 2013-12-12T16:05:12.190 回答