当前位置: 首页 > 知识库问答 >
问题:

sql server中exec sp_executesql 的使用问题?

章禄
2023-11-20

题目描述

有一段SQL语句,我把 sql 单独拿出赋值使用,可以使用条件查询;放在一起使用时条件查询没有效果

题目来源及自己的思路

相关代码

完整SQL:

DECLARE @doctype VARCHAR(64)DECLARE @sql Nvarchar(1000)DECLARE @sql1 Nvarchar(1000)DECLARE @BeginTime NVARCHAR(50)='2023-11-16' -- 开始时间DECLARE @EndTime NVARCHAR(50)='2023-11-20' -- 结束时间DECLARE @ThitObjectId NVARCHAR(100) -- 所属零件代号select @doctype =oid from pdmdoctype where name='BOM表'set @ThitObjectId='Z06-FZWCCST15-03'set @sql='select p.ThitObjectId as 图号,p.filename as 名称,s.name as 录入人员,p.doctype as 文件类型,p.currevision as 文件版本,p.createtime 创建时间,l.name as 所属零件名称,l.ThitObjectId as 所属零件代号,l.cWorkCenter as 工作中心,l.beizhu as 备注 from pdmDocmaster p,Persons s,PartToDoc d,PartRevision l where d.DocId=p.oid and p.creater=s.id and l.id=d.PartId and p.currevision=d.DocVersion and l.version=d.PartVersion  and p.oid in(select oid from '+@doctype+' where createtime>= @BeginTime and createtime<=@EndTime and version=1) and right(p.filename,3)<> ''pdf'' unionselect p.ThitObjectId as 图号,p.filename as 名称,s.name as 录入人员,p.doctype as 文件类型,p.currevision as 文件版本,p.createtime 创建时间,l.name as 所属零件名称,l.ThitObjectId as 所属零件代号,l.cWorkCenter as 工作中心,l.beizhu as 备注 from pdmDocmaster p,Persons s,TiPDMDocToDoc d,PartRevision l where d.SubDocId=p.oid and p.creater=s.id and l.id=d.SuperDocId and p.currevision=d.SubDocVer and l.version=d.SuperDocVer and p.oid in(select oid from '+@doctype+' where createtime>= @BeginTime and createtime<=@EndTime and version=1) and right(p.filename,3)<> ''pdf'' and l.ThitObjectId=@ThitObjectId'exec sp_executesql @sql,N'@BeginTime NVARCHAR(50), @EndTime NVARCHAR(50), @ThitObjectId NVARCHAR(100)', @BeginTime, @EndTime, @ThitObjectId

单独使用的SQL:

select p.ThitObjectId as 图号,p.filename as 名称,s.name as 录入人员,p.doctype as 文件类型,p.currevision as 文件版本,p.createtime 创建时间,l.name as 所属零件名称,l.ThitObjectId as 所属零件代号,l.cWorkCenter as 工作中心,l.beizhu as 备注 from pdmDocmaster p,Persons s,PartToDoc d,PartRevision l where d.DocId=p.oid and p.creater=s.id and l.id=d.PartId and p.currevision=d.DocVersion and l.version=d.PartVersion  and p.oid in(select oid from [BOM表] where createtime>= '2023-11-16' and createtime<='2023-11-20' and version=1) and right(p.filename,3)<> 'pdf'unionselect p.ThitObjectId as 图号,p.filename as 名称,s.name as 录入人员,p.doctype as 文件类型,p.currevision as 文件版本,p.createtime 创建时间,l.name as 所属零件名称,l.ThitObjectId as 所属零件代号,l.cWorkCenter as 工作中心,l.beizhu as 备注 from pdmDocmaster p,Persons s,TiPDMDocToDoc d,PartRevision l where d.SubDocId=p.oid and p.creater=s.id and l.id=d.SuperDocId and p.currevision=d.SubDocVer and l.version=d.SuperDocVer and p.oid in(select oid from [BOM表] where createtime>= '2023-11-16' and createtime<='2023-11-20' and version=1) and right(p.filename,3)<> 'pdf' and l.ThitObjectId='Z06-FZWCCST15-03'

你期待的结果是什么?实际看到的错误信息又是什么?

这是什么原因???求大神解答

共有1个答案

王俊哲
2023-11-20
DECLARE @doctype VARCHAR(64);SELECT @doctype = oid FROM pdmdoctype WHERE name = 'BOM表';DECLARE @sql NVARCHAR(1000);SET @sql = '... where createtime >= ''' + @BeginTime + ''' and createtime <= ''' + @EndTime + ''' and version=1 ...';
 类似资料:
  • 问题内容: 我正在尝试在SQLServer中聚合“ STRING”字段。我想找到与Oracle中相同的函数LISTAGG。 您知道如何执行相同的功能或其他方法吗? 例如, 我希望这个查询的结果是 问题答案: 从SQL Server 2017开始,该功能可用,从而大大简化了逻辑: 在SQL Server中,您可以用来获取结果:

  • 有个老项目使用的是 ASP+SQL Server,今天把它迁移到新服务器上去。 于是就在新服务器上安装好 IIS 和 SQL Server,就把老服务器上的数据给迁移过来。结果发现 ASP 死活连接不上数据库,检查后发现数据库正常、ASP 也正常,但是就是连接不上。提示找不到数据库 ODBC 什么的…… 后来百度一下说需要在 ODBC 数据源管理中新建一个用户 DSN,照做后正常了。 为什么不是像

  • 本文向大家介绍何谓SQLSERVER参数嗅探问题,包括了何谓SQLSERVER参数嗅探问题的使用技巧和注意事项,需要的朋友参考一下 大家听到“嗅探”这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o 。 事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么关系,实际上跟数据库性能调优有关 相信大家有泡SQLSERVER论坛的话不多不少应该都会见过“参数嗅

  • 本文向大家介绍SqlServer数据库中文乱码问题解决方法,包括了SqlServer数据库中文乱码问题解决方法的使用技巧和注意事项,需要的朋友参考一下 问题:创建新数据库,存入中文显示乱码??? 原因分析:SQL版的乱码问题还是出现在SQL SERVER的安装设置上。默认安装时系统默认的排序规则是拉丁文的排序规则,但一般人在安装时没有考虑到这一点,安装时只是点取下一步,安装完成后,造成了SQL版在

  • 本文向大家介绍sqlserver中drop、truncate和delete语句的用法,包括了sqlserver中drop、truncate和delete语句的用法的使用技巧和注意事项,需要的朋友参考一下 虽然小编不建议大家去用命令删除数据库表中的东西,但是这些删除命令总有用的着的地方。 说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄

  • 本文向大家介绍SQLServer中merge函数用法详解,包括了SQLServer中merge函数用法详解的使用技巧和注意事项,需要的朋友参考一下 Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。 M

  • node-sqlserver 是微软官方发布的 SQL Server 的 Node.js 的驱动程序。可允许 Windows 上运行的 Node.js 程序访问 SQL Server 和 Windows Azure SQL 数据库。 该项目托管在 Github 上。

  • sqlserver manager 是一个多功能sqlserver图形管理界面,支持自定义导入导出,自动扫描服务器,数据库。