PDA

View Full Version : Làm sao Return một Table khi dùng lệnh EXEC



vansy_1920
08-11-2010, 18:32
Mình muốn làm một hàm trả về một Table như thế này:

CREATE FUNCTION [dbo].[func_ReturnTable](@MaBang varchar(10))
RETURNS table
AS
return 'select * from' + dbo.func_getdir(@MaBang)
--dbo.func_getdir(@MaBang) = 'site1.Dictionary.dbo.Bang'

Đoạn mã trên không chạy được, nên mình thử dùng EXEC thì không thể Return được:

CREATE FUNCTION [dbo].[func_ReturnTable](@MaBang varchar(10))
RETURNS table
AS
begin
declare @chuoi varchar(50)
set @chuoi='select * from '+ dbo.func_getdir(@MaBang)
exec (@chuoi)
Return ?
end

Bạn nào biết làm sửa giúp mình với, cảm ơn rất nhiều.

hoangnnm
08-11-2010, 19:33
Đơn giản nhất là bạn truyền vào 1 tham số nữa là tên bảng kết quả ví dụ @ketqua = '##ketqua' , và @chuoi = 'select * Into ' + @ketqua + ' from '+ dbo.func_getdir(@MaBang)

vansy_1920
08-11-2010, 23:10
Bạn ơi, Bạn có thể nói rõ hơn được không, làm sao return một table được vậy bạn ?
nó tạo ra cho mình một bảng mới thôi à.

profit2
08-11-2010, 23:15
function trả về một table thì có vẻ hơi phức tạp .Bạn nên kết hợp PROCEDURE và view thì dễ hơn

vansy_1920
08-11-2010, 23:30
Cảm ơn các bạn mình làm được rồi, khi tạo được bảng mới rồi thì mình chỉ cần return select * from newbang là ok rồi. (sau khi chạy xong thì đelete đi cho nó khỏi tốn bộ nhớ :d)

Red Devilic 1
09-11-2010, 10:18
Làm như vậy thì không ổn

Trong những câu truy vấn mà nhiều người có thể sử dụng 1 lúc, nếu bạn tạo ra 1 bảng, sau đó xóa đi, thì một người khác gọi câu truy vấn này sẽ không thể CREATE bảng được.

Trong trường hợp này, tốt nhất là tạo bảng tạm (Temporary Table) hoặc sử dụng biến bảng ( Table Variable ) là tốt nhất.