2009-02-26 44 views
7

Tôi biết tôi có thể trở lại một bảng trống bằng cách sử dụng truy vấn sau đây:Cách ưa thích để trả về một bảng trống trong SQL là gì?

select * from tbFoo where 1=2 

nhưng mã mà không nhìn tốt với tôi.

Có cách nào 'chuẩn' để thực hiện việc này không?

Nếu bạn đang tự hỏi tại sao tôi muốn làm một điều kỳ lạ như vậy, đó là vì I can't name the datatables I return from a stored procedure, vì vậy tôi cần phần giữ chỗ trống.

+0

Bạn đang cố gắng điền một DataTable từ Thủ tục được lưu trữ? –

+0

@REA_ANDREW: thực tế là tôi dự định sử dụng dữ liệu trống này làm kết quả trả về từ một thủ tục được lưu trữ không có nghĩa là tôi không biết cách xử lý resultset trong C#. Tôi đề nghị bạn xóa câu trả lời ngoài chủ đề của bạn :) – Brann

+0

Tôi đã xóa. :) Tôi hiểu lầm cả câu hỏi của bạn và câu trả lời của bạn! –

Trả lời

20

Vừa chạy cả hai:

SELECT TOP 0 * FROM Table 
and 
SELECT * FROM Table WHERE 1=0 

Họ sản xuất chính xác kế hoạch thực hiện tương tự.

+0

@GateKiller: điều này có vẻ tốt hơn :) – Brann

+0

điều gì về lựa chọn hàng đầu 0 1 từ Bảng? – Brann

+1

+1. Câu trả lời được chấp nhận sẽ cho bạn nhiều hơn +15. –

1

Hầu hết thời gian tôi thấy 1 = 0 nhưng có rất nhiều cách tiếp cận tiêu chuẩn khi bạn thực sự phải làm như vậy. Mặc dù thực sự phải là hiếm.

+0

Ok. Có bất kỳ ý nghĩa biểu diễn nào tùy thuộc vào bảng tôi chọn cho lựa chọn của tôi không? Tôi đoán là không ... – Brann

+0

Tôi nghi ngờ có bất kỳ vấn đề hiệu suất lớn, trình tối ưu hóa sẽ thấy rằng không cần phải đọc bất cứ điều gì từ DB, hãy xem kế hoạch thực hiện. – AnthonyWJones

1

Điều bạn thực sự cần là information_schema, việc sử dụng nó sẽ cho phép bạn tìm hiểu định nghĩa của bảng.

Bạn không đề cập đến cơ sở dữ liệu mà bạn đang sử dụng, vì vậy đây là một liên kết về information_schema Support in MySQL, PostgreSQL (và MSSQL, Oracle, Etc)

Một ví dụ từ trang web;

SELECT table_name, column_name, is_nullable, data_type, character_maximum_length 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 

Trong trường hợp của bạn, tất cả những gì bạn cần là tên cột;

SELECT column_name 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 
Các vấn đề liên quan