首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在OpenQuery中执行存储过程缺少什么?

在OpenQuery中执行存储过程缺少什么?
EN

Stack Overflow用户
提问于 2020-12-11 13:07:15
回答 1查看 230关注 0票数 0

我试图使用OpenQuery将数据插入到临时表中。OpenQuery假设执行一个输出数百行的存储过程。

为了不定义Create Table #temp1,我尝试执行OpenQuery并使用Select查询中的into语句将结果插入到#temp1表中。我想知道是什么原因导致它不执行?

  1. ,似乎它可能引用了没有正确放置的问题。我怎样才能得到与此相关的帮助?

  1. My包含多个数据库(实例)。我需要如何在这里定义它?

我在这里提供一个查询的例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);

错误消息:

Msg 102,级别15,状态1,第20行语法不正确,接近'2020‘。

如果我尝试以以下格式执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Select * Into #Temp1 from Openquery(LOCALSERVER, 'EXEC dbo.getRecordsByOrderDate ''2020-12-11'',''''2020-12-12''''') oq

Msg 11529、级别16、状态1、过程sys.sp_describe_first_result_set、第1批开始行31行元数据无法确定,因为每个代码路径都会导致错误;请参阅前面的错误。Msg 2812,级别16,状态62,过程sys.sp_describe_first_result_set,第1行批开始行31无法找到存储过程'dbo.getRecordsByOrderDate'.

EN

回答 1

Stack Overflow用户

发布于 2020-12-11 13:39:07

问题在于你没有转义注入参数的引号。调试动态代码的最简单方法是PRINT/SELECT。如果你这样做,你很快就会发现问题所在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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, '+ @concatCommand +') oq'

PRINT @opQuery;

还会回来..。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Select *
Into #Temp1
from Openquery(LOCALSERVER, 'EXEC dbo.getRecordsByOrderDate '2020-12-11','2020-12-12'') oq

瞧,您的第一个参数转义了第二个参数,因此出现了错误。(我增加了额外的行,因为SO对“漂亮词”的选择认为#是SQL中的一个注释字符,我希望在着色中突出显示转义。)

当在文字字符串中使用单引号时,需要通过“加倍它们向上”('')来转义它们。因此,我需要在最后发言如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Select *
Into #Temp1
from Openquery(LOCALSERVER, 'EXEC dbo.getRecordsByOrderDate ''20201211'',''20201212''') oq

(再次添加用于表示的其他行。)

因此,您需要修复2个注入值的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DECLARE @stDate NVARCHAR(8) = CHAR(39) + CHAR(39) + CONVERT(NVARCHAR(8), @startDate, 112)+ CHAR(39) + CHAR(39) + ',';
DECLARE @enDate NVARCHAR(8) = CHAR(39) + CHAR(39) + CONVERT(NVARCHAR(8), @endDate, 112) + CHAR(39) + CHAR(39);

注:我也更改了数据类型和样式。作为yyyy-MM-dd的样式在Server和数据类型中并不是明确的,因为一个日期不需要20亿个字符。

但是,请注意,在执行此操作之后,您仍然无法访问#Temp1。临时表只对其创建的作用域持续存在,而该作用域是动态SQL的。您需要在动态语句中使用一个永久表,或者在动态语句之外使用一个临时表以在其外部使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65258603

复制
相关文章
手工修复Azure DevOps无法连接到Azure的问题
今天我在为一个从TFVC迁移到Git的老项目重新配置发布到Azure App Service的CI/CD管线的时候,Azure DevOps竟然爆了。这是一个微软已知的bug,目前还未修复,我来带大家看看如何手工workaround这个问题。
Edi Wang
2019/07/09
1.5K0
手工修复Azure DevOps无法连接到Azure的问题
Azure DevOps+Docker+Asp.NET Core 实现CI/CD(三.实现CD持续部署管道)
本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目).
GuZhenYin
2020/08/11
5130
Azure DevOps+Docker+Asp.NET Core 实现CI/CD(三.实现CD持续部署管道)
容器和DevOps:基于容器的DevOps交付管道
DevOps 的出现是为了满足不断增长的市场和消费者对技术应用程序的需求。它旨在在不牺牲软件质量的情况下创建更快的开发环境。DevOps 还专注于在快速开发生命周期中提高软件的整体质量。它依赖于多种技术、平台和工具的组合来实现所有这些目标。
DevOps云学堂
2022/02/13
8230
容器和DevOps:基于容器的DevOps交付管道
使用 Docker、Kubernetes 和 Azure DevOps 实现 DevOps
这篇文章,我们将会介绍所有你想了解的 DevOps 知识,看完后你可以着手构建自己的 CI/CD 流水线。
LinuxSuRen
2020/05/26
1.2K0
Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目).
GuZhenYin
2020/08/11
7320
Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
最近的一段时间,在公司里我都在进行基于 Jenkins 和 SonarQube 配合已有的 Gitlab 搭建部门的持续集成环境的工作,虽然之前有使用过 GitHub Actions 和 Azure DevOps,但是从头开始搭建这样的一套 DevOps 环境还是学习到了一些新的知识点,因此,借着这个中秋国庆假期的机会,分享下整个工具链的搭建过程,如果你也有相似的需求的话,希望可以对你有所帮助
程序员宇说
2020/10/19
8490
从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
最近的一段时间,在公司里我都在进行基于 Jenkins 和 SonarQube 配合已有的 Gitlab 搭建部门的持续集成环境的工作,虽然之前有使用过 GitHub Actions 和 Azure DevOps,但是从头开始搭建这样的一套 DevOps 环境还是学习到了一些新的知识点,因此,借着这个中秋国庆假期的机会,分享下整个工具链的搭建过程,如果你也有相似的需求的话,希望可以对你有所帮助
梁规晓
2020/10/26
8360
从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
[Microsoft Teams]使用连接器接收Azure Devops的通知
连接器(connector)是Teams中频道的一个接受消息的功能,官方的解释如下:
dino.c
2020/03/24
1.7K0
[Microsoft Teams]使用连接器接收Azure Devops的通知
解决Azure DevOps部署到Azure后.NET Core网站无法启动的问题
最近我遭遇了一个奇怪的问题。使用Azure DevOps配置CI/CD管线,自动部署到Azure App Service以后,.NET Core的网站竟然会启动失败。我们来看看如何解决这个问题。
Edi Wang
2019/07/09
9270
解决Azure DevOps部署到Azure后.NET Core网站无法启动的问题
使用Azure DevOps持续集成GitHub项目
微软的Azure DevOps是一款软件开发管理工具,整合了需求、代码、编译、测试、发布等所有功能于一身。今天我们就来看看如何用Azure DevOps对自己GitHub上的项目做持续集成,并能在GitHub显示最新编译状态。
Edi Wang
2019/07/08
1.2K0
使用Azure DevOps持续集成GitHub项目
Azure 静态 web 应用集成 Azure 函数 API
前几次我们演示了如何通过Azure静态web应用功能发布vue跟blazor的项目(使用 Azure静态web应用+Github全自动部署VUE站点、使用Azure静态Web应用部署Blazor Webassembly应用)。但是一个真正的web应用,总是免不了需要后台api服务为前端提供数据或者处理数据的能力。同样前面我们也介绍了Azure函数服务,Azure函数的http trigger可以对http作出响应,可以完美的承当web api的角色。现在Azure静态web应用可以直接集成Azure函数,使得一次发布可以同时发布前端项目(vue、blazor)及后台api服务(azure函数)。
MJ.Zhou
2020/11/24
1.2K0
Azure 静态 web 应用集成 Azure 函数 API
使用Azure DevOps Pipeline实现.Net Core程序的CI
上次介绍了Azure Application Insights,实现了.net core程序的监控功能。这次让我们来看看Azure DevOps Pipeline功能。Azure DevOps Pipeline 是Azure DevOps里面的一个组件,对于12个月试用账号同样永久免费。
MJ.Zhou
2020/07/21
7400
使用Azure DevOps Pipeline实现.Net Core程序的CI
从一个小 Bug,到 Azure DevOps
最近和同事提起一个几年前的 Bug,那是一个很小很小的 Bug,没什么技术含量。那时候我刚入职,正好公司卖了一款仪器到某个国家,但是那边说配套的软件运行不起来,一打开就报错。经过排查发现出错的代码很简单,大致是这样:
dino.c
2021/11/30
4710
从一个小 Bug,到 Azure DevOps
在线Python环境(Azure Notebooks)
上文说道了anaconda的安装和使用。对于动手能力较差的小伙伴们来说,安装还是太过麻烦,一出现问题也不知道如何查错,然后就从入门选择放弃。
罗罗攀
2019/04/18
1.7K0
在线Python环境(Azure Notebooks)
win10 uwp 使用 Azure DevOps 自动构建
通过 Azure DevOps 可以做到自动构建程序,覆盖计划、创建、编程、测试、部署、发布、托管、共享等各个环节,适用于大多数的语言、平台。 本文继续使用图床为例告诉大家如何使用 Azure DevOps 自动构建
林德熙
2019/03/13
4930
win10 uwp 使用 Azure DevOps 自动构建
Azure DevOps 中 Dapr项目自动部署流程实践
注:本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程,只是k8s的yaml配置文件有所不同
重典
2022/04/11
4030
Azure DevOps 中 Dapr项目自动部署流程实践
DevSecOps管道和工具:需要了解的内容[DevOps]
到目前为止,DevOps在IT界已经得到了很好的理解,但是并不是完美的。假设已经在一个项目的现代应用程序交付中实现了所有DevOps工程实践。到达了开发管道的末端,但是一个渗透测试团队(内部或外部)发现了一个安全缺陷,并提出了一个报告。现在必须重新启动所有流程,并要求开发人员修复缺陷。
yyx
2019/12/03
1.2K0
DevSecOps管道和工具:需要了解的内容[DevOps]
Azure DevOps 部署成功后自动发邮件通知
默认情况下,Azure DevOps 在编译成功或失败后,会给项目成员发邮件通知。但是在CI/CD环境下,我们更关心的是什么时候部署完成,然后开展手工或自动化测试。我们来看看如何让 Azure DevOps 在部署成功后自动发邮件通知组员。
Edi Wang
2019/07/09
2K0
Azure DevOps 部署成功后自动发邮件通知
Sonar LTS 版本 8.9发布|新特性
开发人员可以通过静态应用程序安全性测试(SAST)来控制代码安全性,以使用更多语言,更多规则,更好的检测并改善工作流程。
DevOps云学堂
2021/05/11
1.5K0
Sonar LTS 版本 8.9发布|新特性
CRT:一款针对Azure的CrowdStrike安全报告工具
CRT全称为“CrowdStrike Reporting Tool for Azure”,是一款针对Azure的CrowdStrike安全报告工具。该工具会在Azure AD/O365 租户中查询以下配置,并帮助广大研究人员寻找一些跟权限和配置有关的安全信息,以帮助组织更好地保护Azure环境的安全性。
FB客服
2022/04/11
9800
CRT:一款针对Azure的CrowdStrike安全报告工具

相似问题

Exchange Web服务API 1.0错误

13

Exchange web services API -获取所有邮箱

18

测试Exchange Web服务API的最佳策略

10

使用Exchange服务获取电子邮件附件的服务器URL

13

PHP Exchange Web服务-获取邮件正文

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文