【问题标题】:SQL Server : Nested Query FileSQL Server:嵌套查询文件
【发布时间】:2016-04-15 21:32:32
【问题描述】:

如何在 SQL Server 的另一个查询中运行一个查询?

注意:我所说的查询是在 SSMSSLN 项目解决方案中创建的my_query_name.sql。所以我想在my_query_name_2.sql 中运行my_query_name_1.sql

有什么想法吗?

【问题讨论】:

标签: sql-server


【解决方案1】:

这里有一些事情要考虑...... 它使用 BULK INSERT 函数将 SQL 语句加载到临时表中,然后使用动态 SQL 执行它们。

是的......所有常见的 SQL 注入警告都适用,等等,等等,

--Assume this is your main sql file.....
--Execute some SQL commands....

--Now load the second SQL file and execute it

DECLARE @SQL        NVARCHAR(MAX);    
CREATE TABLE #SQL (value    nvarchar(max));

BULK INSERT #SQL
FROM 'C:\TEMP\select2.sql' 
WITH 
(
    DATAFILETYPE = 'char',
    FIELDTERMINATOR = '|',    --<Make sure these characters
    ROWTERMINATOR = '|'       --<don't appear in your SQL statements
);

SELECT @SQL = Value FROM #SQL
EXEC (@SQL);
TRUNCATE TABLE #SQL;

-- Do some other sql commands in your main query


--Now load the third SQL file and execute it
BULK INSERT #SQL
FROM 'C:\TEMP\select3.sql'
WITH 
(
    DATAFILETYPE = 'char',
    FIELDTERMINATOR = '|',    --<Make sure these characters
    ROWTERMINATOR = '|'       --<don't appear in your SQL statements
);

SELECT @SQL = Value FROM #SQL
EXEC (@SQL);

--Do some more sql commands
--etc...

--Clean up the temp table
DROP TABLE #SQL

这种方法可以在没有 SSMS 的情况下工作,并且可以在任何环境中使用

【讨论】:

  • 我不明白。您想从另一个查询运行查询...?这向您展示了如何从文件中加载查询...假设我的答案是您的“my_query_name_1.sql”,它正在加载 my_query_name_2.sql 和 my_query_name_3.sql 等。
  • 好的。试图运行脚本(我显然需要研究它)。我得到一个“数据库中已经有一个名为'#SQL'的对象。” #SQL 位于哪里?
  • #SQL 是我使用的临时表...您可以将 DROP TABLE #SQL 添加到查询的底部。这将清理临时表。我会更新我的答案
【解决方案2】:

首先在 SQL Server Management Studio 中,您需要启用 xp_cmdshell 命令。

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

然后执行下面的命令

EXEC sys.xp_cmdshell 'sqlcmd -S (local) -d Experiments -i C:\Hello.sql'

这里,服务器 =(本地),数据库 = 实验和 SQL 文件 = C:\Hello.sql

这将在 SQL 文件中成功执行查询,但输出格式与正常格式不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2014-07-23
    • 1970-01-01
    • 2017-10-15
    相关资源
    最近更新 更多