Tôi đang viết truy vấn để xoay vòng các phần tử bảng nơi tên cột được tạo động.sử dụng bảng tạm thời trong SQL Azure
SET @query = N'SELECT STUDENT_ID, ROLL_NO, TITLE, STUDENT_NAME, EXAM_NAME, '+
@cols +
' INTO ##FINAL
FROM
(
SELECT *
FROM #AVERAGES
UNION
SELECT *
FROM #MARKS
UNION
SELECT *
FROM #GRACEMARKS
UNION
SELECT *
FROM #TOTAL
) p
PIVOT
(
MAX([MARKS])
FOR SUBJECT_ID IN
('+
@cols +')
) AS FINAL
ORDER BY STUDENT_ID ASC, DISPLAYORDER ASC, EXAM_NAME ASC;'
EXECUTE(@query)
select * from ##FINAL
Truy vấn này hoạt động đúng trong cơ sở dữ liệu cục bộ của tôi, nhưng nó không hoạt động trong SQL Azure do bảng tạm thời toàn cầu không được phép ở đó.
Bây giờ nếu tôi thay đổi ##FINA
L để #FINAL
trong cơ sở dữ liệu địa phương của tôi, nhưng nó mang lại cho tôi lỗi như
tên đối tượng không hợp lệ '#FINAL'.
Tôi làm cách nào để giải quyết vấn đề này?
Tôi không nghĩ rằng vấn đề cụ thể của bạn có thể được giải quyết, vì bạn đang cố gắng xây dựng một thứ gì đó (kết quả được thiết lập với số cột thay đổi) không được SQL hỗ trợ tốt. Trong trường hợp chung, để thực hiện công việc này, bạn phải tạo bảng tạm thời trong phạm vi bên ngoài (tức là trước 'EXECUTE'), nhưng bạn không thể làm điều đó khi bạn không biết bạn đang làm gì sẽ cần. –
Thực ra tôi đã thử nó rồi, tôi đã tạo ra một tên cột có khả năng và đặt tên là @ vào nó. nó không phục vụ bất kỳ mục đích nào vì tôi không thể sử dụng nó trong mệnh đề. tức là CHO SUBJECT_ID TRONG (SELECT cast (subject_id AS NVARCHAR) TỪ #SUBJECT_ID_TABLE) –
Không, điểm là tạo bảng tạm thời '# Final' trước' EXECUTE' - đó là cách duy nhất để có quyền truy cập vào nó trong cả hai phạm vi . Tôi đã chỉ ra một cách có thể làm việc trong câu trả lời của tôi. –