sql server过程中传递参数 [英] parametter pass in sql server procedure

查看:121
本文介绍了sql server过程中传递参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个程序

I m create a procedure

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[getDept](@DptID int,@varCn int,@ids varchar(max))
as
set nocount on
       if @varCn=1
begin
          select dept_name from departments where deptId=@DptID
end
else if @varCn=2
begin
            select dept_name from departments where deptId in (@ids)
end
else
begin
            select dept_name from departments
end



我在C#中称procdure:-



I call procdure in c# :-

DataSet ds = new DataSet();
ds = Connector.ExecuteDataset(func.cn, CommandType.StoredProcedure, "getDeptt", new SqlParameter[3]{
            new SqlParameter("@DptID", 1),
            new SqlParameter("@varCn", 2),
           new SqlParameter("@ids", "2,3,4,5")});



但出现错误(Conversion failed when converting the varchar value ''2,3,4,5'' to data type int

请帮忙.

在此先感谢.



But an error ( Conversion failed when converting the varchar value ''2,3,4,5'' to data type int

Please help.

Thanks in advance.

推荐答案

将sql部分中的第13行更改为如下所示:

Change line 13 in the sql part to something like this:

DECLARE @SQL NVARCHAR(4000)
SET @SQL=
''select dept_name from departments where deptId in ('' +@ids + '')''
EXEC(@SQL)




为避免可能的SQL注入风险,并利用了缓存的查询计划.您也可以尝试这样的操作.



To avoid possible SQL Injection risk and gives advantage of cached query plan. You also can try something like this.

else if @varCn=2
begin
    DECLARE @sqlCommand nvarchar(max)
    SET @sqlCommand = ' SELECT dept_name from departments where deptId in (' + @ids +')'
    EXECUTE sp_executesql @sqlCommand, N'@ids varchar(max)', @ids = @ids
end


HI,

试试这个

更改过程[dbo].[getDept](@ DptID int,@ varCn int,@ ids varchar(max))在
上没有资产 声明@query varchar(500)
如果@ varCn = 1
开始
从deptId = @ DptID
的部门中选择dept_name 结束
否则,如果@ varCn = 2
开始
设置@query =''从(``+ @ ids +'')中的deptId的部门中选择dept_name''
exec(@query)
结束
其他
从部门开始选择部门名称
结束


Try this

ALTER PROCEDURE [dbo].[getDept](@DptID int,@varCn int,@ids varchar(max))asset nocount on
Declare @query varchar(500)
if @varCn=1
begin
select dept_name from departments where deptId=@DptID
end
else if @varCn=2
begin
set @query =''select dept_name from departments where deptId in (''+@ids+'')''
exec (@query)
end
else
begin select dept_name from departments
end


这篇关于sql server过程中传递参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆