Tôi thấy một tuyên bố TSQL ngắn gọn có hiệu quả phân tách một chuỗi thành các ký tự cấu thành của nó, mỗi chuỗi trên một dòng, nhằm mục đích đánh asciigiá giá trị trên mỗi ký tự.
Nếu tôi đang đọc truy vấn một cách chính xác, hiệu quả, 3 CTE đang được sử dụng để chuẩn bị một bảng gồm 1 cột chứa 10.000 hàng, mỗi hàng có giá trị '0'.
CTE thứ tư được định nghĩa như sau:
cteTally(n) AS(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) n
FROM E4
)
Sau đó, CTE này được nối với một bảng chứa một cột có các chuỗi quan tâm, với các mục sau select:
SELECT n, SUBSTRING(LastName, n, 1), ASCII( SUBSTRING(LastName, n, 1))
Đó là, hàng số n, sau đó là ký tự thứ n trong LastName, sau đó là giá trị ascii của ký tự đó.
Các câu hỏi của tôi liên quan đến overmệnh đề trong CTE ở trên.
Về cơ bản, chính xác thì nó đang làm gì?
Nếu chúng ta đang truy vấn row_number từ 10.000 hàng giống nhau, tại sao chúng ta cần một order bymệnh đề? Tại sao mệnh đề order byđược đặt vào một overmệnh đề chứ không phải là một order bymệnh đề cho selectcâu lệnh - đặc biệt là overmệnh đề thậm chí không chỉ định bất kỳ phân vùng nào? (Tôi đoán điều này có nghĩa là cửa sổ trên đó row_numberhoạt động đủ 10.000 hàng?) Và ý nghĩa của việc đặt hàng là select nullgì?

overmệnh đề nóiorder bylà tùy chọn - nhưng tôi đoán điều này có nghĩa là các phân vùng có thể được sử dụng mà không có chức năng cửa sổ (và không yêu cầuorder by). Tên người dùng tốt đẹp!