存储在SQL Server表中的Execute语句

问题描述

作为示例,我将创建一个临时表:

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;

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

谢谢。

解决方法

您必须声明一个变量

DECLARE @Statements NVARCHAR(MAX);

使用#Temptable中的命令填充此变量

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

并执行它:

EXECUTE (@Statements)
;
,

选择查询是一个数据库对象,它在数据表视图中显示信息。查询不存储数据,它显示存储在表中的数据。查询可以显示来自一个或多个表,来自其他查询或来自两者的组合的数据。 (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