Forum Discussion

jmiridium's avatar
jmiridium
Helper IV
9 years ago
Solved

Same Query Across Multiple Servers

I would like to run the following query on multiple servers and enter the results into one table:

 

SELECT
            SERVERPROPERTY('MachineName') AS [ServerName],
            SERVERPROPERTY('ServerName') AS [ServerInstanceName],
            SERVERPROPERTY('InstanceName') AS [Instance],
            SERVERPROPERTY('Edition') AS [Edition],
            SERVERPROPERTY('ProductVersion') AS [ProductVersion],
            Left(@@Version, Charindex('-', @@version) - 2) As VersionName

 

Is this possible?

  • Hi,

     

    What you need is a query with all server names you want to get server information for. Then you can create a function in Power Query / Power BI query editor like below

     

    let
        Source = (ServerName as any) => let
            Source = Sql.Database(ServerName, "master", [Query="SELECT#(lf)            SERVERPROPERTY('MachineName') AS [ServerName],#(lf)            SERVERPROPERTY('ServerName') AS [ServerInstanceName],#(lf)            SERVERPROPERTY('InstanceName') AS [Instance],#(lf)            SERVERPROPERTY('Edition') AS [Edition],#(lf)            SERVERPROPERTY('ProductVersion') AS [ProductVersion],#(lf)            Left(@@Version, Charindex('-', @@version) - 2) As VersionName"])
        in
            Source
    in
        Source

     

    Above query is using ServerName parameter. Once you have the function, you can invoke function in query editor, chosse servername column as the value for function. which will enable you run that function for all servers at the same time.

     

     

    Hope that helps!

     

    Thanks,

    Prathy

5 Replies

  • prathy's avatar
    prathy
    Advocate III

    Hi,

     

    What you need is a query with all server names you want to get server information for. Then you can create a function in Power Query / Power BI query editor like below

     

    let
        Source = (ServerName as any) => let
            Source = Sql.Database(ServerName, "master", [Query="SELECT#(lf)            SERVERPROPERTY('MachineName') AS [ServerName],#(lf)            SERVERPROPERTY('ServerName') AS [ServerInstanceName],#(lf)            SERVERPROPERTY('InstanceName') AS [Instance],#(lf)            SERVERPROPERTY('Edition') AS [Edition],#(lf)            SERVERPROPERTY('ProductVersion') AS [ProductVersion],#(lf)            Left(@@Version, Charindex('-', @@version) - 2) As VersionName"])
        in
            Source
    in
        Source

     

    Above query is using ServerName parameter. Once you have the function, you can invoke function in query editor, chosse servername column as the value for function. which will enable you run that function for all servers at the same time.

     

     

    Hope that helps!

     

    Thanks,

    Prathy

    • jmiridium's avatar
      jmiridium
      Helper IV

      How do I enter multiple servers in the input field?

      • v-qiuyu-msft's avatar
        v-qiuyu-msft
        Community Support

        Hi jmiridium,

         

        The query you provided can return one record each time. You can utilize prathy's suggestion to define a custom function and invoke to return multiple tables contain each server information per table, then use the Append Queries to merge those table to one. Please follow below steps:

         

        1. Create a Blank Query, type the query suggested by prathy.

         

         

        2. Please enter the server name and click Invoke, it will return one table contains information when query executed on that specific server. You can invoke this function multiple times to return multiple tables.

         

         

        3. Use Merge Query as New feature.

        4. You can set those table generated by invoke function not load to table and only load append table by unchecking Enable Load.

         

         

        Please see attached .pbix file.

         

        Best Regards,
        Qiuyun Yu