Bối cảnh: Có một quy trình được lưu trữ thực hiện "nội dung" với bảng tạm thời của tên đã cho. Thủ tục là chung chung ở chỗ nó kiểm tra lược đồ của bảng tạm thời và sau đó thực hiện các "công cụ" khác nhau tùy thuộc vào lược đồ. Tôi hiểu rằng điều này hơi kỳ lạ nhưng tôi không muốn thay đổi nó vì tất cả đều hoạt động tốt trong hầu hết các trường hợp, ngoại trừ ....Tại sao SQL Server cho rằng Bảng tạm thời đã tồn tại khi nó không?
Nếu tôi có một thủ tục lưu trữ tạo hai lược đồ khác nhau cho bảng tạm thời cùng tên. Về mặt logic nó chỉ tạo ra một bảng tạm thời tùy thuộc vào nhánh của IF. Vấn đề là khi SPROC được kiểm tra bởi SQL Server nó có vẻ như nó đang đánh giá cả hai mặt của NẾU
Vì vậy, SQL này không thành công (trong đó có ý nghĩa nếu nó được kiểm tra cú pháp SQL.):
IF (1=1)
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL
)
END
ELSE
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL,
c BIGINT NOT NULL
)
END
--exec SomeProcedureWhichDoesStuffWith#Test
DROP TABLE #test
với các lỗi sau:
Msg 2714, Level 16, State 1, Line 14
There is already an object named '#test' in the database.
Không kết hợp thả bảng bên trong IFS (trước hoặc sau khi bảng tạo DDL) dường như đáp ứng các checker sql.
Bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này? Tôi có thể, ví dụ, nói với SQL để không thực hiện kiểm tra cú pháp và chỉ chấp nhận sproc như là?
Có cảm ơn cho thông tin. Thật không may nó tạo ra các bảng trong một sproc, do đó, nó có được trong cùng một lô (vì vậy nó không phải là đi trên GO). –