【问题标题】:Execute statement that is stored inside a SQL Server table执行存储在 SQL Server 表中的语句
【发布时间】:2020-12-12 10:46:24
【问题描述】:

例如,我将创建一个临时表:

CREATE TABLE #TembTable  
(
      Command VARCHAR(max)  
) 

将值插入表中

INSERT INTO #TembTable (Command)
VALUES ('SELECT @@VERSION AS Version_Name ;'),
       ('SELECT @@LANGUAGE AS Current_Language;'),
       ('SELECT @@LANGID AS Language_ID ;'),
       ('SELECT @@SERVERNAME AS Server_Name;'),
       ('SELECT @@SERVICENAME AS Service_Name;')

如果我选择所有值

SELECT * FROM #TembTable

结果会显示:

SELECT @@VERSION AS Version_Name ;
SELECT @@LANGUAGE AS Current_Language;
SELECT @@LANGID AS Language_ID ;
SELECT @@SERVERNAME AS Server_Name;
SELECT @@SERVICENAME AS Service_Name;

我想做的是自动执行每个命令。

谢谢。

【问题讨论】:

  • 要运行存储在表中的SQL,需要一个循环一次处理多行,然后sp_executesql执行动态SQL。
  • 您可能还希望有一个具有 ORDER 的临时表 - 而不是您所希望的随机表。即添加一个 ID 字段,以便您可以按 ID 排序执行它们。否则,您在检索时可能会或可能不会以相同的顺序获取它们。
  • 为什么不简单地创建一个视图呢? create view ... as select @@version as version_name, @@language as current_language, ...

标签: sql-server tsql sql-server-2012 dynamic-sql


【解决方案1】:

你必须声明一个变量

DECLARE @Statements NVARCHAR(MAX);

用#Temptable中的命令填充这个变量

SET @Statements = ( SELECT STRING_AGG (CONVERT(NVARCHAR(MAX),Command), NCHAR(13)) 
                    FROM   #TembTable)
;

并执行它:

EXECUTE (@Statements)
;

【讨论】:

    【解决方案2】:

    选择查询是在数据表视图中显示信息的数据库对象。查询不存储数据,它显示存储在表中的数据。查询可以显示来自一个或多个表、其他查询或两者组合的数据。 (https://support.microsoft.com/en-us/office/create-a-simple-select-query-de8b1c8d-14e9-4b25-8e22-70888d54de59#:~:text=A%20select%20query%20is%20a,a%20combination%20of%20the%20two)

    如果您的意图是获取语句的值,那么您可以合并一个存储过程来执行上述操作。

    CREATE PROCEDURE Getdetails
    AS
    BEGIN
        SELECT @@VERSION AS Version_Name ;
        SELECT @@LANGUAGE AS Current_Language;
        SELECT @@LANGID AS Language_ID ;
        SELECT @@SERVERNAME AS Server_Name;
        SELECT @@SERVICENAME AS Service_Name;
    END;
    

    获取 o/p:下面将检索您需要的所有详细信息

    exec Getdetails

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多