存储过程传参数问题 - 字符传参

业余程序员 2008-02-28 03:44:06
CREATE procedure dbo.ShangWu16 /* 查询外援数据 */
@TugboatNO nvarchar(250),
as
Select * From TugboatData Where 拖轮名称 in (@TugboatNO)
GO

问题在于:

第一种: Exec ShangWu16 'T5' 可以查询出结果

第二种: Exec ShangWu16 'T5,T8,T9' 查询不出结果

第三种: Exec ShangWu16 '''T5'',''T8'',''T9''' 查询不出结果

除了只能传一个数之外我想不出用其它的方法.因为我需要查询多个结果.上现这个存储过程我是简化过的,我写存储过程有很多的参数需要传递一起进行处理.

Select * From TugboatData Where 拖轮名称 in ('T5','T6','C1','C11','C3','C8')
我想传参数是红色的那部份.不知道怎么传了.

希望大家帮忙....
...全文
67 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jian_xiaowei 2008-02-28
  • 打赏
  • 举报
回复
只能是手工拼接SQL语句,楼上的都正解
wzy_love_sly 2008-02-28
  • 打赏
  • 举报
回复
--a. 要查询的字段类型是数字型

--查询的值列表
DECLARE @idlist varchar(100)
SET @idlist='1,2,3'

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO

--b. 要查询的字段类型是字符型
--查询的值列表已经加上了字符串边界符
DECLARE @idlist varchar(100)
SET @idlist='''a'',''b''''a'',''c'''

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO


qgmzhfj 2008-02-28
  • 打赏
  • 举报
回复
就是传进来一个参数,用','分割,然后在存储过程里拆分
muse2008 2008-02-28
  • 打赏
  • 举报
回复
不对,上面的代码不对,思路是这样的。
muse2008 2008-02-28
  • 打赏
  • 举报
回复

CREATE procedure dbo.ShangWu16 /* 查询外援数据 */
@TugboatNO nvarchar(1000),
as
Exec('Select * From TugboatData Where 拖轮名称 in (' + @TugboatNO + ')'
GO



调用时使用第二种,思路是这样,传进来是字符串变量,使用时就应该当字符串使用。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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