如何将存储在表中的sql语句应用到存储过程中?

user139 2006-03-15 11:20:50

存储过程定义为:
ALTER PROCEDURE dbo.ProcSys_GetBillNO (@NOName varchar(20),@TDate smalldatetime,@Param1 varchar(20)='',@TBillNO varchar(30) output)
AS
declare @LCode varchar(3); declare @AutoContn bit;declare @AutoAIMin tinyint
declare @LikeStr varchar(10);declare @SqlStr as varchar(200)

/* 取引导码、是否年续号、流水号位数 */
set @LCode=(SELECT LeadCode FROM System_BBills WHERE (BBillNO = @NOName) )
set @SqlStr=从表中取到的 sql语句(我在一表中存储了一段SQL语句如:@LCode + Right(Year(@Tdate),2))

下面的问题:
如何让下面一句生效?
set @LikeStr= @SqlStr..(这里如何才能得到@LCode + Right(Year(@Tdate),2)的计算结果?)

感谢帮助!
...全文
171 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2006-03-15
  • 打赏
  • 举报
回复
declare @LCode varchar(3)
declare @AutoContn bit
declare @AutoAIMin tinyint
declare @LikeStr varchar(10)
declare @SqlStr as varchar(200)
declare @tdate as datetime

/* 取引导码、是否年续号、流水号位数 */
set @LCode='123'--(SELECT LeadCode FROM System_BBills WHERE (BBillNO = @NOName) )
set @SqlStr='@LCode + Right(Year(@Tdate),2)'--从表中取到的 sql语句(我在一表中存储了一段SQL语句如:@LCode + Right(Year(@Tdate),2))
set @tdate = '2003-02-10'

DECLARE @strSQL NVARCHAR(1000),@COUNT INT

SET @strSQL = N'SELECT @COUNT= '+ @SqlStr
EXEC SP_EXECUTESQL @strSQL,N'@COUNT INT OUT,@Lcode varchar(3),@tdate datetime',@COUNT OUT,@lcode,@tdate
SELECT @COUNT


/*

-----------
12303
*/
user139 2006-03-15
  • 打赏
  • 举报
回复
To:wgsasd311(自强不息)
无法运行

To:happyflystone(没枪的狙击手)

效果一样,没有声明@LCode变量
rivery 2006-03-15
  • 打赏
  • 举报
回复
1.可以考虑使用sp_executesql,完成变量值的替代.
2.可以试试:set @LikeStr=replace(replace(@SqlStr,'@LCode',@lcode),'@Tdate',convert(varchar(10),@Tdate,120))
-狙击手- 2006-03-15
  • 打赏
  • 举报
回复
set @LikeStr= cast(@count as varchar)
-狙击手- 2006-03-15
  • 打赏
  • 举报
回复
DECLARE @strSQL NVARCHAR(1000),@COUNT INT

SET @strSQL = N'SELECT '+ @SqlStr
EXEC SP_EXECUTESQL @strSQL,N'@COUNT INT OUT',@COUNT OUT
SELECT @COUNT
wgsasd311 2006-03-15
  • 打赏
  • 举报
回复
set @LikeStr= @SqlStr..(这里如何才能得到@LCode + Right(Year(@Tdate),2)的计算结果?)
===>
set @LikeStr= @SqlStr
declare @s nvarchar(4000)
set @s=cast(@likestr as nvarchar)
exec sp_executesql @s,N'@lcode varchar(3),@tdate datetime',@lcode varchar(3),@tdate datetime
wangdehao 2006-03-15
  • 打赏
  • 举报
回复
exec(@LikeStr)
EXECUTE
执行标量值的用户定义函数、系统过程、用户定义存储过程或扩展存储过程。同时支持 Transact-SQL 批处理内的字符串的执行

若要唤醒调用函数,请使用 EXECUTE stored_procedure 中描述的语法。
user139 2006-03-15
  • 打赏
  • 举报
回复
请再想想,谢谢
lsqkeke 2006-03-15
  • 打赏
  • 举报
回复
在exec ()中和外面,会话环境改变了
lsqkeke 2006-03-15
  • 打赏
  • 举报
回复
不对,你字符串中有变量 ! :(
不好意思哦
user139 2006-03-15
  • 打赏
  • 举报
回复
不可以,说没有定义@LCode,在本存储过程中已经定义,但提示依然如此。
lsqkeke 2006-03-15
  • 打赏
  • 举报
回复
直接用:
exec(@SqlStr)
user139 2006-03-15
  • 打赏
  • 举报
回复
谢谢几位
user139 2006-03-15
  • 打赏
  • 举报
回复
set @SqlStr= replace(replace(@SqlStr,'@LCode',''''+@LCode+''''),'@Tdate',''''+convert(varchar(10),@Tdate,120)+'''')
set @SqlStr=@SqlStr+' INTO ##tmp00'
exec sp_executesql @SqlStr
set @LikeStr=(Select * from ##tmp00)
Drop table ##tmp0000
WPS Office 2019 是一款功能丰富的办公软件套装,它整合了文字、表格、演示、PDF 等组件,具备体积小巧、功能丰富、兼容性强等特点,能满足日常办公的多种需求。 功能组件丰富:包含 WPS 文字、WPS 演示、WPS 表格、WPS PDF 等组件,可用于文档编辑、表格计算、幻灯片制作、PDF 处理等,支持 DOC、DOCX、XLS、XLSX、PPT 等多种格式,能与 Microsoft Office 较好地兼容。 支持云存储与协作:用户登录 WPS 账号后,可实现多终端、跨平台的数据同步,还能与他人协同办公,文档可通过微信、QQ 等社交平台一键分享。 PDF 功能强大:提供沉浸式 PDF 阅读体验和稳定的编辑服务,支持一键编辑 PDF 文档内容。借助 OCR 技术,可精准转换文档、表格、PPT、图片等格式的文件。 界面设计优化:具有全新视觉设计,默认皮肤舒适清爽,还支持桌面背景、界面字体、皮肤、格式图标等个性化设置。同时,文档标签可拖拽成独立窗口或合并,用户可自主选择文档显示方式,还能将文件放置在不同工作区,便于分类浏览与管理。 内置实用工具:内置了简单的网页浏览器,点击文档的链接会默认用其打开,可进行网页添加到首页、另存为 PDF 等操作。此外,“应用心” 集成了输出转换、文档助手、安全备份等多种实用功能。 模板资源丰富:稻壳商城提供了大量模板、范文、图片等素材资源,涵盖求职简历、总结计划、合同协议等常见文档类型,方便用户快速创建专业文档。 表格功能特色突出:支持通过关键词快速切换工作表,设有阅读模式和护眼模式。还可分类合并单元格,以及拆分合并单元格并填充内容。公式编辑器可轻松完成公式嵌套,筛选时可通过 “仅筛选此项” 一步完成特定值筛选,还能根据筛选条件生成动态分析图表。另外,“特色功能” 和 “智能工具箱” 菜单包含 PDF

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧