2008-10-12 17 views
5

tôi vô tình mã SELECT $FOO.. và đã nhận lỗi "pseudocolumn không hợp lệ '$ FOO'"pseudocolumn" của SQL là gì?

tôi không thể tìm thấy bất kỳ tài liệu cho chúng nó là cái gì tôi cần biết

Edit:..? Đây là một SQL MS máy chủ câu hỏi cụ thể

Trả lời

0

một tìm kiếm Google đơn giản sẽ trả this từ Oracle tham khảo:.

một pseudocolumn hoạt động như một bảng cột, nhưng không phải là một ctually được lưu trữ trong bảng. Bạn có thể chọn từ pseudocolumns, nhưng bạn không thể chèn, cập nhật hoặc xóa các giá trị của chúng.

Tôi nghĩ rằng lỗi bạn nhận được đơn giản vì không có cột $ FOO, do đó trình phân tích cú pháp truy vấn sẽ kiểm tra xem có một psuedocolumn có tên $ FOO như dự phòng hay không. Và vì không có pseudocolumn có tên là "$ FOO" (và không có dự phòng khác) bạn nhận được lỗi "pseudocolumn $ FOO" không hợp lệ. Đây là một đoán, mặc dù. Tôi không có chuyên gia khi nói đến cơ sở dữ liệu.

+1

Google: người lập trình tốt nhất (sau Stack Overflow :-) – Flupkear

+0

Tôi hỏi về SQL Server chứ không phải Oracle. Thông báo lỗi để chọn cột đơn thuần không tồn tại như chọn foo, khác với chọn $ foo –

0

Pseudocolumn là cột ảo có sẵn trong trường hợp đặc biệt. Trong cơ sở dữ liệu Oracle, có một mẫu giả ROWNUM sẽ cung cấp cho bạn số thứ tự hàng. SQL server, theo như tôi biết, không thực sự hỗ trợ pseudocolumns nhưng có lỗi và các thủ tục được lưu trữ tham chiếu đến các cột giả, có thể là do di trú của Oracle.

0

Một ví dụ về cột giả là ROWID trong Informix. Đó là một số 32 bit có thể được sử dụng để tìm trang dữ liệu nhanh hơn bất kỳ cách nào khác (tùy thuộc vào sự cẩn trọng, chẳng hạn như bảng không bị phân mảnh) vì về cơ bản là địa chỉ trang cho dữ liệu. Bạn có thể làm SELECT * FROM SomeTable và nó sẽ không hiển thị; bạn có thể làm SELECT ROWID, * FROM SomeTable và nó sẽ hiển thị trong dữ liệu của bạn. Bởi vì nó không thực sự được lưu trữ trên đĩa (bạn sẽ không thấy ROWID trên đĩa với dữ liệu, mặc dù ROWID cho bạn biết nơi để tìm trên đĩa cho dữ liệu), nó là một cột giả. Có thể có các cột giả khác được liên kết với các bảng - chúng có xu hướng tương tự như phần nào bí truyền.

Chúng cũng có thể được gọi là cột bị ẩn, đặc biệt nếu chúng (trái với cột giả) thực sự được lưu trữ trong cơ sở dữ liệu, nhưng không được chọn bởi *; bạn phải yêu cầu cụ thể cột để xem nó.

3

Pseudocolumn là bí danh tượng trưng cho cột thực tế, có đặc tính đặc biệt, ví dụ, $ IDENTITY là bí danh cho cột có IDENTITY được gán, $ ROWGUID cho cột có ROWGUIDCOL được gán. Nó được sử dụng cho các kịch bản hệ thống ống nước nội bộ.

+0

+1 Tôi biết bạn có thể sử dụng 'identitycol' nhưng không biết cú pháp đó. –

1

Tôi không biết tại sao hầu hết các câu trả lời là Oracle cụ thể Câu hỏi là về SQL Server!

Cũng như câu trả lời của RobsonROX một ví dụ khác về việc sử dụng của chúng là trong mệnh đề output của tuyên bố merge. $action cho biết hàng đã được chèn hay bị xóa.

0

cột giả là các cột sai. bất kỳ bảng nào sẽ hỗ trợ các cột giả giống như cột của riêng nó nghiêm chỉnh nói rằng chúng có chức năng: 1.SYSDATE; 2.ROWNUM; 3.ROWID; 4.NEXTVAL; 5.CURRVAL; 6.LEVEL;

1

Một mẫu giả hoạt động giống như một cột bảng, nhưng không thực sự được lưu trữ trong bảng. Bạn có thể chọn từ các cột giả, nhưng bạn không thể chèn, cập nhật hoặc xóa các giá trị của chúng.

Các vấn đề liên quan