Có vẻ như họ muốn khả năng chỉ trả về các trường được phép, có nghĩa là số lượng trường được trả lại cũng phải là động. Điều này sẽ làm việc với 2 biến. Bất cứ điều gì nhiều hơn thế sẽ trở nên khó hiểu.
IF (selectField1 = true AND selectField2 = true)
BEGIN
SELECT Field1, Field2
FROM Table
END
ELSE IF (selectField1 = true)
BEGIN
SELECT Field1
FROM Table
END
ELSE IF (selectField2 = true)
BEGIN
SELECT Field2
FROM Table
END
SQL động sẽ trợ giúp với bội số. Ví dụ này giả định rằng ít nhất 1 cột là đúng.
DECLARE @sql varchar(MAX)
SET @sql = 'SELECT '
IF (selectField1 = true)
BEGIN
SET @sql = @sql + 'Field1, '
END
IF (selectField2 = true)
BEGIN
SET @sql = @sql + 'Field2, '
END
...
-- DROP ', '
@sql = SUBSTRING(@sql, 1, LEN(@sql)-2)
SET @sql = @sql + ' FROM Table'
EXEC(@sql)
Nguồn
2009-06-24 13:49:28
Điều tôi muốn làm thực sự phức tạp hơn rất nhiều so với việc chỉ chọn 1 hoặc 2 trường. Tôi có một loạt các lĩnh vực mà tôi cần để có thể tự động lựa chọn, cũng như làm một WHERE trên các lĩnh vực nhất định, ví dụ: @ whereField1 = 1 @ whereField2 = 1 @ whereField3 = 0 , vv và sau đó làm một WHERE trên Field1 chỉ khi @ whereField1 = 1 vv Dường như với tôi như ví dụ thứ hai của bạn có thể là cách duy nhất để thực sự làm điều này. Mặc dù có bao nhiêu ký tự là varchar (MAX)? – Karl
SQL 2005 có thể lưu trữ tới 8000 ký tự. –
@Justin varchar (tối đa) trong SQL2005 không giới hạn ở 8000 ký tự. varchar (max) đã được giới thiệu trong SQL 2005 như một số loại thay thế kiểu dữ liệu văn bản với sự hỗ trợ của các hàm sẵn dùng cho varchar. – kristof