存储过程如下create proc testpro
(
@ids varchar(100)
)
as
select * from table where id in(@ids)
要求 在程序中传递多个ID
sting ids="1,2,3,4,5,6";
如何将ids传递到存储过程中 被存储过程识别呢?
(
@ids varchar(100)
)
as
select * from table where id in(@ids)
要求 在程序中传递多个ID
sting ids="1,2,3,4,5,6";
如何将ids传递到存储过程中 被存储过程识别呢?
解决方案 »
- 新手提问,请帮忙,谢谢
- 请教大师,获取cookie的问题
- 兄弟们,帮我出主意
- .net autocad 提取图幅
- 急问!!
- 各位大哥,请帮我看看这个问题,我本来想出200分,可是系统提示我不能出200分,哈哈,csdn啥时改版了?
- 谁推荐一本学习ASP.NET的书,要VB.NET的,中文的!
- 一个gridview控件加载在updatepanel里面,单一点机GRIDVIEW删除按纽旧出现12030错误?
- 请教如果在一个页面上取几个表的数据进行显示,可以进行分页吗?
- 我装好vs.net后重装了iis,现在打开一个.aspx文件时,提示:选择打开方式。怎办?
- sb.Append("<b/>·<a href=\"javascript:alert(\"aaaaaaaaa\")\">"+"zzzzz"+" </a>"
- MVC中,有继承关系的类映射出错
(
@ids varchar(100)
)
as
declare @sql varchar(1000)set @sql='select * from table where id in('+@ids+')'
exec(@sql)
(
@ids varchar(100)
)
asEXEC 'select * from table where id in('+@ids+')'不就完了么
会不会被怀疑倒粪啊....
cmd.commandType=CommandType.StoredProcedure; //表明着是一个存储过程SqlParameter oparam; //参数化查询
oparam=new SqlParameter("@id",SqlDbType.char,9);
ocmd.Parameters.Add(oparam);
oparam.value="1,2,3,4,5,6";
把SQL改造为select into 啊先定义好临时表http://www.w3school.com.cn/sql/sql_select_into.asp
create table #tmp(GPA decimal(18,2))
declare @sql varchar(1000)
set @sql='insert into #tmp(GPA) select GPA from result'
exec(@sql)
select * from #tmp
@str varchar(1000),
@sep varchar(10)
)
returns @arr table(
[index] int identity(1,1),
[value] varchar(20)
)
as
begin
declare @i int, @tmpStr varchar(50)
set @i = charindex(@sep, @str) while @i > 0
begin
set @tmpStr = substring(@str, 1, @i-1)
set @str = stuff(@str, 1, @i, '')
set @i = charindex(@sep, @str)
insert into @arr([value]) values(@tmpStr)
end
insert into @arr([value]) values(@str)
return
end
go
create table #tmp(GPA decimal(18,2))declare @sql varchar(1000)--存储过程传过来的参数,下面两行可以去掉
declare @ids varchar(100)
set @ids = '1,2,3,4,5,6'set @sql='insert into #tmp(GPA) select GPA from result where id in ('+@ids+')'
exec(@sql)
select * from #tmp--drop table #tmp
先写一个分割字符串函数,在调用
CREATE FUNCTION [dbo].[FN_SPLIT_CODE] (@CODELIST NVARCHAR(4000),@SPLITCODE CHAR(1))
RETURNS @CODE_LIST TABLE (CODE NVARCHAR(50))
AS
BEGIN
/*
* 1.SYSTEM : NSMART
* 2.DB OWNER : dbo
* 3.DESCRIPTION : 以特定字符分解对象列表
* 4.Author
* 5.IN/OUTPUT :
* ------------------------------------------------------------------ * I/O Type PARA NAME DESCRIPTION
* ---------- ---------- --------------- -------------------------- * [IN] VARCHAR @CODELIST 对象列表
* [IN] CHAR @SPLITCODE 分割符
* ------------------------------------------------------------------ *
* 9.HISTORY :
* ------------------------------------------------------------------ */
DECLARE @TEMP_VAR VARCHAR(4000)
DECLARE @TEMP_INDEX INT
IF LEN(@CODELIST)>0 AND SUBSTRING(@CODELIST,1,1)='%'
SET @TEMP_VAR = REPLACE(@CODELIST,'%','')
ELSE
SET @TEMP_VAR = @CODELIST
SET @TEMP_INDEX = CHARINDEX(@SPLITCODE,@TEMP_VAR) WHILE @TEMP_INDEX > 0
BEGIN
INSERT @CODE_LIST
SELECT SUBSTRING(@TEMP_VAR,0,@TEMP_INDEX) SET @TEMP_VAR = SUBSTRING(@TEMP_VAR,@TEMP_INDEX+1,LEN(@TEMP_VAR)-@TEMP_INDEX)
SET @TEMP_INDEX = CHARINDEX(@SPLITCODE,@TEMP_VAR)
END IF LEN(@TEMP_VAR) > 0
INSERT @CODE_LIST
SELECT @TEMP_VAR RETURN
END
分割字符串函数网上有很多。这个是我以前用的,是定制的,自动忽略字符串前的'%'然后写存储过程
create proc testpro
(
@ids varchar(100)
)
as
select * from table, [FN_SPLIT_CODE] (@ids,',') where id = CONVERT(INT,CODE)
大体这样
set @sql='select * from table where id in(' + @id +')'
exec (@sql)
SqlParameter param = new SqlParameter();
param.ParameterName = "@param";
param.Value = "1,2,3,4,5";
command.Parameters.Add(param);