Skip to main content

Linked server sql statements

Some time ago, I talked about executing direct sql statements, and now I want to share some sql statements that I used to manage linked server connections.
What follows are 4 sql statements that allow you to add en remove linked servers on a database at runtime.
Some assumptions:
- There is a str variable named “query” that will contain the query
- there is a parm method on the class that return the sql server (“server” or “server\instance”)
- there is a parm method that returns a username
- there is a parm method that returns a password
Check if linked server exist
First check if the linked server doesn’t exist yet, or you will get an error when you try to add one that already exists.

query = strfmt("select top 1 * from sys.servers where name = '%1'", this.parmServer());

Add linked server When the linked server doesn’t exist, add it.

query = strfmt("EXEC sp_addLinkedServer @server = '%1', @srvproduct=N'SQL Server'", this.parmServer());

Add linked server login Optionally, you can add a login that will be used to connect to the linked server.

query = strfmt("sp_addlinkedsrvlogin @rmtsrvname = '%1' ,@useself = FALSE, @locallogin = NULL, @rmtuser = '%2', @rmtpassword = '%3'",
                    this.parmServer(),
                    this.parmUsername(),
                    this.parmPassword());

Remove linked server Optionally, you can remove the linked server.

query = strfmt("EXEC sp_dropserver '%1', 'droplogins'", this.parmServer());

Popular posts from this blog

Dynamics Axapta: Sales Orders & Business Connector

Well, again folllowing my same idea of writting close to nothing and pasting code, I'll paste in some code to create a sales order from some basic data and the invoice it. I'll try to explain more in the future. AxaptaObject axSalesTable = ax.CreateAxaptaObject("AxSalesTable"); AxaptaRecord rcInventDim = ax.CreateAxaptaRecord("InventDim"); AxaptaRecord rcCustTable = ax.CreateAxaptaRecord("CustTable"); rcCustTable.ExecuteStmt("select * from %1 where %1.AccountNum == '" + MySalesOrderObject.CustAccount + "'"); if (MySalesOrderObject.CurrencyCode.Trim().Length == 0) MySalesOrderObject.CurrencyCode = rcCustTable.get_Field("Currency").ToString().Trim(); string sTaxGroup = rcCustTable.get_Field("taxgroup").ToString().Trim(); //set header level fields axSalesTable.Call("parmSalesName", MySalesOrderObject.SalesName.Trim()); axSalesTable.Call("parmCustAccount", M

Passing values between form and class

Class name is EmplDuplication and Form is EmplTable . void clicked() {    MenuFunction mf;    args args = new Args();    ;     args.record(EmplTable);     mf = new menufunction(identifierstr(EmplDuplication), MenuItemType::Action); mf.run(args); } Meanwhile, in the main() method of the EmplDuplication class, we need to put this Axapta x++ code to get the datasource: static void main(Args args) {     EmplDuplication EmplDuplication; EmplTable localEmplTable; ;     if(args.record().TableId == tablenum(EmplTable)) localEmplTable = args.record();     ... }