Tôi có một thủ tục được lưu trữ trước tiên kiểm tra bảng tạm thời (#temp_table), xóa nó nếu nó tồn tại, sử dụng bảng, sau đó cuối cùng giảm nó khi nó được thực hiện. SP này được gọi ngẫu nhiên khi người dùng thực hiện điều gì đó để kích hoạt nó và có khả năng đôi khi SP sẽ được thực hiện cùng một lúc - hoặc với một số trùng lặp.Trong MS SQL Server 2005, điều gì sẽ xảy ra khi một bảng tạm thời đang được truy cập bởi các thực thi khác nhau của cùng một SP?
Cho phép nói rằng tôi có Exec1 và Exec2 cả hai cùng một SP tạo, thay đổi và thả bảng #temp và chúng chạy trong mili giây của nhau.
Điều gì sẽ xảy ra? Exec1 sẽ khóa #temp_table và Exec2 đợi trong khi Exec1 kết thúc? Điều đó rõ ràng là mong muốn trong trường hợp của tôi. Tôi sẽ không muốn cả hai Exec1 & 2 để sử dụng bảng tại sametime, và cũng không muốn Exec2 thất bại vì Exec1 đã sử dụng bảng.
[EDIT] Tôi có nên chuyển bảng tạm thời thành biến bảng không?
Vì vậy, trong SP của tôi, tôi có 'IF OBJECT_ID ('tempdb .. # temp_table') IS NOT NULL \t DROP TABLE # temp_table' điều này không có gì sau đó? Hoặc điều này có thể có tác động bất lợi đến các hành vi khác không? – jreed121
Bạn không cần điều đó nếu bạn đang gọi nó từ một phiên mới mỗi lần (ví dụ: từ một ứng dụng web), vì phạm vi của bảng tạm thời bị giới hạn trong phiên. Xem câu trả lời của tôi để biết thêm thông tin. –
Bạn không cần như Dommer nói nhưng nó luôn luôn là một thực hành tốt để kiểm tra sự tồn tại của OBJECT trước khi bạn cố gắng tạo ra nó. giữ mã bit đó trong proc của bạn. –