SQL PRINT vs SQL EXEC












0















When executing the query below if i use PRINT it prints correctly i can copy and paste the printed code and execute it. However is i use EXEC i get the following



error on exec



Is there a way of simplifying what i am doing? Why does SQL PRINT and SQL EXEC deliver these two very different result sets?



DECLARE @TableName as NVARCHAR(250), @SQL as VARCHAR(MAX);

DECLARE @TableCursor as CURSOR;
SET @TableCursor = CURSOR FOR
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
AND name like 'HISTORY_MasterList_%'
ORDER BY sobjects.name

OPEN @TableCursor;
FETCH NEXT FROM @TableCursor INTO @TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL ='select '''+ @TableName +''', 0
Union All
select All ''Server Count'',count(1) from ['+ @TableName +']
Union All
select All ''Server Cores'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
Union All
select ''Production Servers'',count(1) from ['+ @TableName +'] where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
Union All
select ''Production Cores'', sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
Union All
select ''Production Server Count after filtering out passive/failover servers'', count(1) from
(select distinct m.ServerName
from ['+ @TableName +'] m
inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
and unit <> 0) aa
Union All
select ''Production Server Cores after filtering out passive/failover servers'', sum(convert(decimal(18,0),cores)) from(
select distinct m.ServerName, m.Cores
from ['+ @TableName +'] m
inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
and unit <> 0) aa
Union All
select ''Non-Prod SQL Instances downgraded to Developer Edition'',count(1) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
Union All
select ''Non-Prod SQL Instance Core Count downgraded to Developer Edition'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
Union All
select ''Non-Prod VMs moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''VM Moved/right sized from Prod Env to NonProd''
Union All
select ''Non-Prod VMs TO BE moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''Sent for V2V - non prod split''
'

EXEC @SQL

FETCH NEXT FROM @TableCursor INTO @TableName;
END
CLOSE @TableCursor;
DEALLOCATE @TableCursor;








share



























    0















    When executing the query below if i use PRINT it prints correctly i can copy and paste the printed code and execute it. However is i use EXEC i get the following



    error on exec



    Is there a way of simplifying what i am doing? Why does SQL PRINT and SQL EXEC deliver these two very different result sets?



    DECLARE @TableName as NVARCHAR(250), @SQL as VARCHAR(MAX);

    DECLARE @TableCursor as CURSOR;
    SET @TableCursor = CURSOR FOR
    SELECT sobjects.name
    FROM sysobjects sobjects
    WHERE sobjects.xtype = 'U'
    AND name like 'HISTORY_MasterList_%'
    ORDER BY sobjects.name

    OPEN @TableCursor;
    FETCH NEXT FROM @TableCursor INTO @TableName;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @SQL ='select '''+ @TableName +''', 0
    Union All
    select All ''Server Count'',count(1) from ['+ @TableName +']
    Union All
    select All ''Server Cores'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
    Union All
    select ''Production Servers'',count(1) from ['+ @TableName +'] where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
    Union All
    select ''Production Cores'', sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
    where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
    Union All
    select ''Production Server Count after filtering out passive/failover servers'', count(1) from
    (select distinct m.ServerName
    from ['+ @TableName +'] m
    inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
    where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
    and unit <> 0) aa
    Union All
    select ''Production Server Cores after filtering out passive/failover servers'', sum(convert(decimal(18,0),cores)) from(
    select distinct m.ServerName, m.Cores
    from ['+ @TableName +'] m
    inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
    where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
    and unit <> 0) aa
    Union All
    select ''Non-Prod SQL Instances downgraded to Developer Edition'',count(1) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
    Union All
    select ''Non-Prod SQL Instance Core Count downgraded to Developer Edition'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
    Union All
    select ''Non-Prod VMs moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''VM Moved/right sized from Prod Env to NonProd''
    Union All
    select ''Non-Prod VMs TO BE moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''Sent for V2V - non prod split''
    '

    EXEC @SQL

    FETCH NEXT FROM @TableCursor INTO @TableName;
    END
    CLOSE @TableCursor;
    DEALLOCATE @TableCursor;








    share

























      0












      0








      0








      When executing the query below if i use PRINT it prints correctly i can copy and paste the printed code and execute it. However is i use EXEC i get the following



      error on exec



      Is there a way of simplifying what i am doing? Why does SQL PRINT and SQL EXEC deliver these two very different result sets?



      DECLARE @TableName as NVARCHAR(250), @SQL as VARCHAR(MAX);

      DECLARE @TableCursor as CURSOR;
      SET @TableCursor = CURSOR FOR
      SELECT sobjects.name
      FROM sysobjects sobjects
      WHERE sobjects.xtype = 'U'
      AND name like 'HISTORY_MasterList_%'
      ORDER BY sobjects.name

      OPEN @TableCursor;
      FETCH NEXT FROM @TableCursor INTO @TableName;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @SQL ='select '''+ @TableName +''', 0
      Union All
      select All ''Server Count'',count(1) from ['+ @TableName +']
      Union All
      select All ''Server Cores'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
      Union All
      select ''Production Servers'',count(1) from ['+ @TableName +'] where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      Union All
      select ''Production Cores'', sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
      where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      Union All
      select ''Production Server Count after filtering out passive/failover servers'', count(1) from
      (select distinct m.ServerName
      from ['+ @TableName +'] m
      inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
      where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      and unit <> 0) aa
      Union All
      select ''Production Server Cores after filtering out passive/failover servers'', sum(convert(decimal(18,0),cores)) from(
      select distinct m.ServerName, m.Cores
      from ['+ @TableName +'] m
      inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
      where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      and unit <> 0) aa
      Union All
      select ''Non-Prod SQL Instances downgraded to Developer Edition'',count(1) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
      Union All
      select ''Non-Prod SQL Instance Core Count downgraded to Developer Edition'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
      Union All
      select ''Non-Prod VMs moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''VM Moved/right sized from Prod Env to NonProd''
      Union All
      select ''Non-Prod VMs TO BE moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''Sent for V2V - non prod split''
      '

      EXEC @SQL

      FETCH NEXT FROM @TableCursor INTO @TableName;
      END
      CLOSE @TableCursor;
      DEALLOCATE @TableCursor;








      share














      When executing the query below if i use PRINT it prints correctly i can copy and paste the printed code and execute it. However is i use EXEC i get the following



      error on exec



      Is there a way of simplifying what i am doing? Why does SQL PRINT and SQL EXEC deliver these two very different result sets?



      DECLARE @TableName as NVARCHAR(250), @SQL as VARCHAR(MAX);

      DECLARE @TableCursor as CURSOR;
      SET @TableCursor = CURSOR FOR
      SELECT sobjects.name
      FROM sysobjects sobjects
      WHERE sobjects.xtype = 'U'
      AND name like 'HISTORY_MasterList_%'
      ORDER BY sobjects.name

      OPEN @TableCursor;
      FETCH NEXT FROM @TableCursor INTO @TableName;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @SQL ='select '''+ @TableName +''', 0
      Union All
      select All ''Server Count'',count(1) from ['+ @TableName +']
      Union All
      select All ''Server Cores'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
      Union All
      select ''Production Servers'',count(1) from ['+ @TableName +'] where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      Union All
      select ''Production Cores'', sum(convert(decimal(18,0),cores)) from ['+ @TableName +']
      where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      Union All
      select ''Production Server Count after filtering out passive/failover servers'', count(1) from
      (select distinct m.ServerName
      from ['+ @TableName +'] m
      inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
      where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      and unit <> 0) aa
      Union All
      select ''Production Server Cores after filtering out passive/failover servers'', sum(convert(decimal(18,0),cores)) from(
      select distinct m.ServerName, m.Cores
      from ['+ @TableName +'] m
      inner join [SQLEnv].[dbo].[vwManView] v on m.ServerName = v.ServerName
      where Classification in (''Prod'',''Production'',''Prd'',''Unknown'')
      and unit <> 0) aa
      Union All
      select ''Non-Prod SQL Instances downgraded to Developer Edition'',count(1) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
      Union All
      select ''Non-Prod SQL Instance Core Count downgraded to Developer Edition'',sum(convert(decimal(18,0),cores)) from ['+ @TableName +'] where ''InstanceStatus'' like ''Downgrade%''
      Union All
      select ''Non-Prod VMs moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''VM Moved/right sized from Prod Env to NonProd''
      Union All
      select ''Non-Prod VMs TO BE moved from Prod Environments'', count(1) from ['+ @TableName +'] where ServerStatus like ''Sent for V2V - non prod split''
      '

      EXEC @SQL

      FETCH NEXT FROM @TableCursor INTO @TableName;
      END
      CLOSE @TableCursor;
      DEALLOCATE @TableCursor;






      sql-server sql-server-2012 sql-server-2008 sql-server-2008-r2 t-sql





      share












      share










      share



      share










      asked 1 min ago









      VorsterVorster

      12410




      12410






















          0






          active

          oldest

          votes











          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "182"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232492%2fsql-print-vs-sql-exec%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Database Administrators Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232492%2fsql-print-vs-sql-exec%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          SQL Server 17 - Attemping to backup to remote NAS but Access is denied

          Always On Availability groups resolving state after failover - Remote harden of transaction...

          Restoring from pg_dump with foreign key constraints