这种sql应该怎么写呀?

Micao_tong 2007-04-29 08:25:04
比如:
SELECT * FROM ACCTA TA INNER JOIN ACCTB TB ON TA.TA001=TB.TB001 WHERE TA004 IN('某个数'):

"某个数": 我希望是N个数,是不确定的。如果要写在存储过程中“某个数”为参数的话,怎么写呀?
...全文
231 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Micao_tong 2007-05-07
  • 打赏
  • 举报
回复
在前台怎么调用呀?
zhangxiaopin 2007-04-29
  • 打赏
  • 举报
回复

//****用存储过程哈

create proc proc_xt_filter
(
@strSQL varchar(1000)
)
as

@strSQLEx varchar(2000);


begin
set @strSQLE='SELECT * FROM ACCTA TA INNER JOIN ACCTB TB ON TA.TA001=TB.TB001 WHERE TA004 IN(SELECT F_ID FROM YOURTABLE WHERE (1>0)'+ @strSQL +')'

end
smile9961 2007-04-29
  • 打赏
  • 举报
回复
--一个临时表,用来测试。
create table # (id int identity(1,1), chars nvarchar(10))
insert into #
select 'a' union all
select 'b' union all
select 'e'

--存储过程
create proc dbo.test
(
@arr nvarchar(1000)
)
as
begin
declare @sql nvarchar(4000)
set @sql = 'select * from # where chars in (' + @arr + ')'

exec sp_executesql @sql
end
go

--调用存储过程, ' ''a'', ''b'' '是你要传入的参数。
exec dbo.test ' ''a'', ''b'' '

--删除用于测试的表和存储过程
drop proc dbo.test
drop table #
smile9961 2007-04-29
  • 打赏
  • 举报
回复
--一个临时表,用来测试。
create table # (id int identity(1,1), chars nvarchar(10))
insert into #
select 'a' union all
select 'b' union all
select 'e'

--存储过程
create proc dbo.test
(
@arr nvarchar(1000)
)
as
begin
declare @sql nvarchar(4000)
set @sql = 'select * from # where chars in (' + @arr + ')'

exec sp_executesql @sql

drop table #
end
go

--调用存储过程, ' ''a'', ''b'' '是你要传入的参数。
exec dbo.test ' ''a'', ''b'' '

--删除用于测试的表和存储过程
drop proc dbo.test
drop table #
Micao_tong 2007-04-29
  • 打赏
  • 举报
回复
我试试看,EXEC(@SQL)这个是做什么?
winner2050 2007-04-29
  • 打赏
  • 举报
回复
搞错
CREATE PROCEDURE SP_TopWinCMS_Article_Delete
@IDs varchar(100)
AS
Declare @SQL varchar(8000)
set @SQL= 'DELETE FROM TopWinCMS_Article where IDs in('+ @IDs +')'
EXEC (@SQL)
GO
winner2050 2007-04-29
  • 打赏
  • 举报
回复
另外的方法参考


CREATE PROCEDURE SP_TopWinCMS_Article_Delete
@IDs varchar(100)
AS
Declare @SQL varchar(8000)
set @SQL= 'DELETE FROM '+ TopWinCMS_Article +' where IDs in('+ @IDs +')'
EXEC (@SQL)
GO
winner2050 2007-04-29
  • 打赏
  • 举报
回复
在查询分析器里面运行
CREATE function My_split(@aString varchar(8000),@pattern varchar(10))
returns @temp table([Sid] [int] IDENTITY (1, 1) NOT NULL ,Myvalues varchar(100))
--实现split功能的函数
--说明:@aString,字符串,如“27,28,29”;@pattern,分隔标志,如“ ,”
as
begin
declare @i int
set @aString=rtrim(ltrim(@aString))
set @i=charindex(@pattern,@aString)
while @i>=1
begin
insert @temp values(left(@aString,@i-1))
set @aString=substring(@aString,@i+1,len(@aString)-@i)
set @i=charindex(@pattern,@aString)
end
if @aString<>''
insert @temp values(@aString)
return
end


添加进这个函数以后。

如果存储过程传递进来的字符串是1,2,3,4,5,6,7---假设为@IDs varchar 100

存储过程里面这么用。
update TopWinCMS_ArticleComment set Pass =1 where ID
in (select Myvalues FROM my_split(@IDs, ','))

smile9961 2007-04-29
  • 打赏
  • 举报
回复
create proc dbo.test
(
@arr nvarchar(1000)
)
as
begin
create table # (id int identity(1,1), chars nvarchar(10))
insert into #
select 'a' union all
select 'b' union all
select 'e'

declare @sql nvarchar(4000)
set @sql = 'select * from # where chars in (' + @arr + ')'

exec sp_executesql @sql

drop table #
end

go

declare @arr nvarchar(1000)
set @arr = ' ''a'', ''b'' '

exec dbo.test @arr

drop proc dbo.test
重典 2007-04-29
  • 打赏
  • 举报
回复
,
Micao_tong 2007-04-29
  • 打赏
  • 举报
回复
您是怎么个传法?
yaojian524 2007-04-29
  • 打赏
  • 举报
回复
在sql里面写好像不容易
yaojian524 2007-04-29
  • 打赏
  • 举报
回复
我用的是个笨方法 在外面拼个字符串传进来
xianggang101 2007-04-29
  • 打赏
  • 举报
回复
在存储过程中把sql组装好,然后用exec sp_excutesql sql语句 来执行就可以。
hexinyu2005 2007-04-29
  • 打赏
  • 举报
回复
用逗号隔开呀

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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