set QUOTED_IDENTIFIER ON
go
/****** Object: Stored Procedure dbo.spOrdersInsert ******/
ALTER PROCEDURE [dbo].[spOrdersInsert]
(
@CustomerID INT,
@CartID VARCHAR(50),
@Memo VARCHAR(2000),
@OrderID INT OUTPUT
)
AS
-- 確保數據的一致性, 因而起用事務
BEGIN TRAN OrdersInsert
/* 產生訂單 */
INSERT INTO Orders
(
CustomerID,
Memo
)
VALUES
(
@CustomerID,
@Memo
)
-- 返回當前所產生的OrderID
SELECT
@OrderID = @@Identity
/* 將當前用戶的當前購物車COPY到當前所產生的ORDER明細中*/
INSERT INTO OrdersDetail
(
OrderID,
ProductID,
Quantity,
UnitCost
)
------------------------有問題呀?????
SELECT
@OrderID,
ShoppingCart.ProductID,
Quantity,
Products.UnitCost
FROM
ShoppingCart
INNER JOIN Products ON ShoppingCart.ProductID = Products.ProductID
WHERE
CartID = @CartID
COMMIT TRAN OrdersInsert
提示 還可以通過剪切和粘貼的方法,將行從一個表複製到另一個表中。有關詳細信息,請參見在結果窗格中添加新行。
創建 INSERT FROM 查詢時指定:
將行復制到的數據庫表(目的表)。
從其中複製行的表(源表)。源表或表成爲子查詢的一部分。如果是在表內進行復制,則源表和目的表相同。
源表中要進行內容複製的列。
將數據複製到的目的表中的目標列。
定義要複製的行的搜索條件。
排序次序(如果要以特定的順序對行進行復制)。
"分組"選項(如果只對彙總信息進行復制)。
例如,下面的查詢將書名信息從 titles 表複製到一個名爲 archivetitles 的存檔表中。該查詢對屬於某個出版商的所有書名的四列內容進行復制:
INSERT INTO archivetitles
(title_id, title, type, pub_id)
SELECT title_id, title, type, pub_id
FROM titles
WHERE (pub_id = '0766')
注意 若要將值插入到新行中,請使用 INSERT INTO 查詢。
可以對行中的選定列或所有列的內容進行復制。在任何一種情況下,所複製的數據都必須與要複製到的行中的列兼容。例如,如果複製某列(如 price 列)的內容,要複製到的行中的列必須接受帶小數位數的數字型數據。如果要對整行進行復制,則目的表必須具有和源表的物理位置相同的兼容列。
當創建 INSERT FROM 查詢時,網格窗格將更改以反映可用於複製數據的選項。添加了一個"追加"列,以允許指定數據應複製到的列。
注意 不能撤消執行從中插入查詢的操作。作爲預防措施,請在執行 INSERT INTO 查詢前備份數據。
創建 INSERT FROM 查詢
在查詢設計器窗口右擊,指向"更改類型"菜單,然後選擇"從中插入"命令。
在爲 INSERT FROM 查詢選擇表對話框中,選擇將行復制到的表(目的表)。
注意 查詢設計器無法事先確定可以更新哪些表和視圖。因此,在"爲 INSERT FROM 查詢選擇表"對話框的"表名"列表中,將顯示出所查詢的數據連接中所有可用的表和視圖,甚至包括或許不能將行復制到的那些表和視圖。
將要從中複製行的表(源表)添加到查詢中。有關詳細信息,請參見添加表。如果是在表內複製行,則可以將源表作爲目的表添加。
源表中的數據列出現在關係圖窗格的輸入窗口中。
在表示表或表結構化對象的矩形中,選擇要進行內容複製的列名。若要複製整行,請選擇"*(所有列)"。
查詢設計器將選擇的列添加到網格窗格的"列"列中。
在網格窗格的"追加"列中,在目的表中爲要複製的每列選擇一個目標列。如果要複製整行,則選擇表名.*。目的表中的各列必須與源表中的各列有相同(或兼容)的數據類型。
如果要以特定的順序對行進行復制,請指定排序次序。有關詳細信息,請參見對查詢結果排序。
在"準則"列中輸入搜索條件以指定要複製的行。有關詳細信息,請參見指定搜索條件。
如果沒有指定搜索條件,則源表中的所有行都將被複制到目的表中。
注意 當將要搜索的列添加到網格窗格時,查詢設計器也將該列添加到待複製列的列表中。如果要將某列作爲搜索條件但不對其進行復制,則在表示表或表結構化對象 的矩形中清除該列名旁邊的複選框。
如果要複製彙總信息,請指定"分組"選項。有關詳細信息,請參見彙總表中所有行的值。
當執行 INSERT FROM 查詢時,結果窗格中將不報告任何結果。而是顯示一條消息指出已複製的行數。
下面的查詢將書名信息從 titles 表複製到一個名爲 archivetitles 的存檔表中。該查詢對屬於某個出版商的所有書名的四列內容進行復制:
INSERT INTO archivetitles
(title_id, title, type, pub_id)
SELECT title_id, title, type, pub_id
FROM titles
WHERE (pub_id = '0766')