熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL Server開發問題前十名[3]

2022-06-13   來源: SQL Server 

  我編寫了一個存儲過程在Crystal Report中使用它工作得很好我還想在另外一個存儲過程中使用這個存儲過程產生的結果我該怎麼做?

  專家回答:

  只要存儲過程只產生了一個單個的結果要在另外一個存儲過程中使用這個存儲過程產生的輸出這個技術是非常直接的這個技術就是使用一個臨時表來裝載存儲過程的巨額iguo然後通過INSERT EXEC語句來執行這個過程並保存結果一旦結果保留在臨時表中了他們就可以像使用其它表數據一樣來使用它了

  這裡是我們可能會復用的一個過程例子:
  CREATE PROC usp_Demo_AllAuthors as select * from pubsauthors
GO
  
  現在有一個存儲過程使用usp_Demo_AllAuthors的結果:
  CREATE proc usp_Demo_SPUser as CREATE TABLE #Authors (
  au_id varchar() NOT NULL PRIMARY KEY CLUSTERED
  au_lname varchar () NOT NULL
  au_fname varchar () NOT NULL
  phone char () NOT NULL
  address varchar () NULL
  city varchar () NULL
  state char () NULL
  zip char () NULL
  contract bit NOT NULL
  )– Execute usp_Demo_AllAuthors storing the
  – results in #Authors
  insert into #Authors
  exec usp_Demo_AllAuthors– Here we use the #Authors table This example   only
  – only selects from the temp table but you could do much
  – more such as use a cursor on the table or join with
  – other data
  SELECT au_fName + + au_lname as [name]
   address+ +city+ +state+ +zip [Addr]
  from #AuthorsDROP TABLE #Authors
  GO

  SQL Server 中的存儲過程並發問題

  問題提交於

  我在SQL Server中遇到了並發問題我持有車票的公共汽車上有一些空閒的座位我在插入銷售的查票之前需要查看是否還有空閒的座位我的存儲過程做的事情如下所示:

  CREATE PROCEDURE add_ticket — parameters DECLARE free_seats int BEGIN TRANSACTION SELECT free_seats = COUNT(*) FROM tickets WHERE
  seat_is_not_taken IF free_seats <> INSERT INTO tickets VALUES(…) — some other statements END TRANSACTION

  問題就是兩個過程可以同時讀取空閒票數並且都可以預約一張票即使是那裡已經沒有空余的了我需要一種方法來防止一個過程在另一個過程運行add_ticket程序但是還沒有插入一張新票的時候讀取空票的數量在這種情況下SET TRANSACTION ISOLATION LEVEL不管用了我說的對嗎?

  專家回答:

  你是正確的;更高的隔離級別也不會保證多個讀者去同時去讀取同一個數據行然而還有幾種方法你可以完成這項工作例如你可以給每個座位分配一個惟一的標識符(意思是惟一鍵——不一定是GUID)並且創建一個描述哪些座位已經被預訂了的表在表上放一個 UNIQUE約束你就可以確保同一個座位不會被插入兩次了

  就是說我認為一個更有趣的方法就是使用SQL Service Broker你可以為每個公交建立一個會話並且將這個會話的句柄存放在一個表中讀者在執行RECEIVE之前可以參考這個表通過這種方式讀者就可以正確地過濾公共汽車上的每個座位都插一個消息到隊列中讀者就可以簡單地RECEIVE到所需的消息(在這個過程中預定公共汽車上的座位) Service Broker會確保沒有消息會被接受兩次也就是說你不會再遇到並發問題了

[]  []  []  []  []  


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22462.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.