【发布时间】:2020-12-11 21:07:15
【问题描述】:
我正在尝试使用 OpenQuery 将数据插入临时表。 OpenQuery 假设执行一个输出数百行的存储过程。
为了不定义Create Table #temp1,我正在尝试执行OpenQuery,并使用Select 查询中的to 语句将结果插入#temp1 表中。我想知道是什么导致它不执行?
-
似乎它可能引用了未正确放置的问题。我如何获得与此相关的帮助?
-
我的服务器包含多个数据库(实例)。这里需要怎么定义?
我在这里提供我的查询示例
DECLARE @startDate DATETIME = CONVERT(DATE, GETDATE());
DECLARE @endDate DATETIME = CONVERT(DATE, GETDATE()+1);
DECLARE @stDate NVARCHAR(MAX) = CHAR(39) + CONVERT(NVARCHAR(255), @startDate, 23)+ CHAR(39) + ',';
DECLARE @enDate NVARCHAR(MAX) = CHAR(39) + CONVERT(NVARCHAR(255), @endDate, 23) + CHAR(39);
DECLARE @execCommand NVARCHAR(MAX) = CHAR(39) + 'EXEC dbo.getRecordsByOrderDate ' ;
DECLARE @concatCommand NVARCHAR(MAX) = @execCommand + @stDate + @enDate + CHAR(39);
DECLARE @opQuery Nvarchar(MAX) = 'Select * Into #Temp1 from Openquery(LOCALSERVER, '+ @concateCommand +') oq'
EXEC (@opQuery);
错误信息:
消息 102,级别 15,状态 1,第 20 行“2020”附近的语法不正确。
如果我尝试以以下格式执行
Select * Into #Temp1 from Openquery(LOCALSERVER, 'EXEC dbo.getRecordsByOrderDate ''2020-12-11'',''''2020-12-12''''') oq
消息 11529,级别 16,状态 1,程序 sys.sp_describe_first_result_set,第 1 行 [批处理开始第 31 行] 无法确定元数据,因为每个代码路径都会导致 错误;查看其中一些以前的错误。
消息 2812,第 16 级, 状态 62,过程 sys.sp_describe_first_result_set,第 1 行 [批处理 开始第 31 行] 找不到存储过程 'dbo.getRecordsByOrderDate'。
【问题讨论】:
-
为什么说它不执行?
-
@Larnu 请检查我的错误信息
-
@Jeremy:为了不定义
CREATE TABLE,我使用了INTO声明。 -
和往常一样,我必须发布关于动态 SQL 的圣经。 sommarskog.se/dynamic_sql.html
标签: sql-server stored-procedures openquery