Hi Alan, thank you very much for idea, great. I set all in similar way, but it looks, that with xlat is no possible for define first column in update reply section. for example: update control { Tmp-String-0 := %{sql:SELECT CONCAT(attribute,'#',value) from database_ table where...} } if ( control:Tmp-String-0 =~ /^(\S+)#(.*)$/ ) { update reply { "%{1}" += "%{2}" test_attribute += "%{2}" } } if the sql SELECT CONCAT(attribute,'#',value) ... return in attribute "some_ attribute" and in value "some_value", the answer should be 2 lines: some_attribute += some_value --- this is from xlat "%{1}" += "%{2}" test_attribute += some_value --- this is from xlat test_ attribute += "%{2}" but in the answer is only one line "test_attribute += some_value" according xlat test_attribute += "%{2}" In debug I can see, that the expansion of %{1} is correct, and that in update reply section is the line "some_attribute += some_value" inserted, but in radius response is no line "some_attribute += some_value" Maybe I do something wrong. Thank you, Petr Linke ---------- Original-mail ---------- From: Alan Buxey <alan.buxey@gmail.com> To: FreeRadius users mailing list <freeradius-users@lists.freeradius.org> Date: 13. 4. 2018 19:19:29 Subject: Re: multiple columns in rlm_sql "with later versions of 3.0.x you can do things like update control { Tmp-String-0 := %{sql:SELECT CONCAT(attribute,'#',op,'#',value) from database_table where username = '%{User-Name}'}" } if ("%{explode:&control:Tmp-String-0 #}" > 0) { foreach &control:Tmp-String-0 { if ("%{Foreach-Variable-0}" =~ /^([^=]+)=(.*)$/) { update reply { "%{1}" "%{2}" "%{3}" } } } } edit as required....should do the job. alan - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users. html"