C#中遇到一问题
mssql假如存在表 myrole 该表有如下两个字段 myid(int) myname(varchar(30))设置一变量string idstr 值为"1','2','3','"的模式
批量删除使用sql语句 delete from myrole where myid in('+ idstr +') 可以顺利执行当使用存储过程却无法顺利执行
存储过程如下,传入的@RoleIDStr值为上面的idstr
在执行中发现一个问题:如果将@RoleIDStr varchar不指定大小,即如以下存储过程,可以顺利完成执行,并且返回值为1,却不能删除任何数据。
如果@RoleIDStr varchar指定大小,也就是写为@RoleIDStr varchar(1000)的时候却提示"无法将varchar转为int的值"
CREATE PROCEDURE Delmyroles
(
@ReturnValue int output,
@RoleIDStr varchar
)
as
set nocount on
begin
BEGIN TRANSACTION
delete from myrole where myid in (@RoleIDStr)
IF @@error=0
begin
COMMIT TRANSACTION
SET @ReturnValue=1
end
ELSE
begin
ROLLBACK TRANSACTION
SET @ReturnValue=0
end
return @ReturnValue
end
GO请问大家怎么回事,如果是存储过程的问题,存储过程该如何写呢?
mssql假如存在表 myrole 该表有如下两个字段 myid(int) myname(varchar(30))设置一变量string idstr 值为"1','2','3','"的模式
批量删除使用sql语句 delete from myrole where myid in('+ idstr +') 可以顺利执行当使用存储过程却无法顺利执行
存储过程如下,传入的@RoleIDStr值为上面的idstr
在执行中发现一个问题:如果将@RoleIDStr varchar不指定大小,即如以下存储过程,可以顺利完成执行,并且返回值为1,却不能删除任何数据。
如果@RoleIDStr varchar指定大小,也就是写为@RoleIDStr varchar(1000)的时候却提示"无法将varchar转为int的值"
CREATE PROCEDURE Delmyroles
(
@ReturnValue int output,
@RoleIDStr varchar
)
as
set nocount on
begin
BEGIN TRANSACTION
delete from myrole where myid in (@RoleIDStr)
IF @@error=0
begin
COMMIT TRANSACTION
SET @ReturnValue=1
end
ELSE
begin
ROLLBACK TRANSACTION
SET @ReturnValue=0
end
return @ReturnValue
end
GO请问大家怎么回事,如果是存储过程的问题,存储过程该如何写呢?
该表有如下两个字段 myid(int)...string idstr 应该是1,2,3
如果传入这样的值
存储过程执行时如下面形式
delete from myrole where myid in('1,2,3,')这样是运行不了的
只能是如下形式
delete from myrole where myid in('1','2','3','')
即传入的值为1','2','3','才行
我直接执行能够正常
可是一旦把1','2','3','传入存储过程就不行了
delete from myrole where myid in(1,2,3)
而@RoleIDStr为varcahr
在存储过程中就便成了delete from myrole where myid in('1,2,3')无法执行
set @sql = 'delete from myrole where myid in(' +@RoleIDStr +')'
exec @sql
自己核对一下引号