You've got some invalid syntax on the `set @smsContent = Field()` lines at the bottom. The [**field()**][1] function has three arguments, one optional. It's a good practice wrap your personalization strings in the [**AttributeValue()**][2] function, to ensure null values are handled. I'd also make heavy use of the [**output()**][3] function for debugging -- so you know what your variable values are when the AMPScript is executed. You should also check for rowcount() after every lookup. You missed one after the `Set @BatchSMSMessage7 = LookupRows()` line. %%[ VAR @language, @languages, @smsContent, @name, @custId, @names, @BatchSMSList7, @BatchSMSList7Record, @campaigncode, @message, @BatchSMSMessage7, @BatchSMSMessage7Record set @custID = AttributeValue("cust_id") set @name = AttributeValue("name") output(concat("custID:",@custID)) output(concat(", name:",@name)) Set @names = LookupRows("SCV_SF", "cust_id", @custID) output(concat(", RowCount(@names):",RowCount(@names))) IF RowCount(@names) > 0 THEN Set @nameRecord = Row(@names,1) Set @name = Field(@nameRecord,"cust_name") output(concat(", name:",@name)) ENDIF set @language = AttributeValue("language") IF empty(@language) THEN Set @language = "EN" Set @languages = LookupRows("SCV_SF", "cust_id", @custID) output(concat(", RowCount(@languages):",RowCount(@languages))) IF RowCount(@languages) > 0 THEN Set @langRecord = Row(@languages,1) Set @language = Field(@langRecord,"language") output(concat(", language:",@language)) ENDIF ENDIF Set @BatchSMSList7 = LookupRows("Batch SMS List 7", "cust_id", @custID) output(concat(", RowCount(@BatchSMSList7):",RowCount(@BatchSMSList7))) IF RowCount(@BatchSMSList7) > 0 THEN Set @BatchSMSList7Record = Row(@BatchSMSList7,1) Set @campaigncode = Field(@BatchSMSList7Record,"campaign_code") set @message = Field(@BatchSMSList7Record, "message") output(concat(", campaigncode:",@campaigncode)) output(concat(", message:",@message)) Set @BatchSMSMessage7 = LookupRows("Batch SMS Message 7", "campaign_code", @campaigncode, "message", @message) output(concat(", RowCount(@BatchSMSMessage7):",RowCount(@BatchSMSMessage7))) if RowCount(@BatchSMSMessage7) > 0 THEN Set @BatchSMSMessage7Record = Row(@BatchSMSMessage7,1) IF @language == "ZH" THEN Set @smsContent = Field(@BatchSMSMessage7Record,"sms_chi") ELSE Set @smsContent = Field(@BatchSMSMessage7Record,"sms_eng") ENDIF endif ENDIF ]%% %%=v(@smsContent)=%% [1]: https://help.marketingcloud.com/en/documentation/ampscript/ampscript_syntax_guide/api_ampscript_functions/field/ [2]: https://help.marketingcloud.com/en/documentation/ampscript/ampscript_syntax_guide/utilities_ampscript_functions/attributevalue/ [3]: https://help.marketingcloud.com/en/documentation/ampscript/ampscript_syntax_guide/utilities_ampscript_functions/output/