表变量与存储过程的问题

hcflf 2005-06-26 11:21:18
本来问题是想解决如何在存储过程的参数中使用in,查了些资料可以用set 变量=sql语句来解决
但又遇到了insert into 表变量时,出现“必须声明变量‘@t’”的提示,请高手提供些解决的方案或思路,谢谢。
--===========
CREATE PROCEDURE [dbo].[pr_Sel]
@keywd varchar(100), --关键词
@flag varchar(200) --标识,如:1,2,3,6,7
As
Declare @tt table([N] int identity(1,1) not null,[ID] int)
Declare @sqltext varchar(5000)
if @keywd <> '' select @keywd = '%' + @keywd + '%'
set @sqltext = 'insert into '+@t+' select a.[ID] from [tblname1] as a inner join [tblname2] as b on b.[tid] = a.[ID]'
+' where ('''+@keywd+''' = '''' or (b.[tname] like '''+@keywd+''' or b.[pname] like '''+@keywd+'''))'
+' and (a.[flag] in('+@flag+'))'
+' order by a.[ID] desc'
exec(@sqltext)
select @@rowcount
go
...全文
149 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcflf 2005-06-27
  • 打赏
  • 举报
回复
感谢三位,问题已经解决了
talantlee 2005-06-27
  • 打赏
  • 举报
回复
CREATE PROCEDURE [dbo].[pr_Sel]
@keywd varchar(100), --关键词
@flag varchar(200) --标识,如:1,2,3,6,7
As

Declare @sqltext varchar(5000)
if @keywd <> '' select @keywd = '%' + @keywd + '%'
set @sqltext = 'Declare @t table ([N] int identity(1,1) not null,[ID] int)

insert into @t select a.[ID] from [tblname1] as a inner join [tblname2] as b on b.[tid] = a.[ID]'
+' where ('''+@keywd+''' = '''' or (b.[tname] like '''+@keywd+''' or b.[pname] like '''+@keywd+'''))'
+' and (a.[flag] in('+@flag+'))'
+' order by a.[ID] desc'
exec(@sqltext)
select @@rowcount
zheninchangjiang 2005-06-27
  • 打赏
  • 举报
回复
将declare声明表变量一句放入@sqltext中
hcflf 2005-06-26
  • 打赏
  • 举报
回复
to fancyf
这个方法在创建存储过程时不会有错,但执行时会提示"必须声明变量@tt"

另外,我上面声明的@tt和@sqltext中的@t应为一致,写错了的。
fanruinet 2005-06-26
  • 打赏
  • 举报
回复
试试
set @sqltext = 'insert into @tt([ID]) select a.[ID] from [tblname1] as a inner join [tblname2] as b on b.[tid] = a.[ID]'

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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