请教表名作为储存过程参数

ghghg007 2009-04-12 11:10:26

ALTER proc [dbo].[Search]
@tabel varchar(10), /*表名*/
@a varchar(10),/*列名*/
@b VarChar(50)/*查询参数*/
as
begin
declare @sql as varchar(100)

set @sql='select * from '+@tabel+' where '+@b+' =gggg'/*这里提示列名gggg无效,按道理应是@b是列名*/
exec(@sql)
end

/*以上执行没问题,可到了程序运行就不行了*/
...全文
123 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy_lihuan 2009-04-12
  • 打赏
  • 举报
回复
'''+@b+'''
不是两个,是三个!
我姓区不姓区 2009-04-12
  • 打赏
  • 举报
回复
……
try:


ALTER proc [dbo].[Search]
@tabel varchar(10), /*表名*/
@a varchar(10),/*列名*/
@b VarChar(50)/*查询参数*/
as
begin
declare @sql as varchar(100)
set @tabel=@tabel
set @b=@b
set @sql = 'select ID from '+@tabel+' where '+@a+' = '''+@b+''''/*要搞清楚哪个是参数,哪个是字符串*/
exec(@sql)
end
ghghg007 2009-04-12
  • 打赏
  • 举报
回复
ALTER proc [dbo].[Search] 
@tabel varchar(10), /*表名*/
@a varchar(10),/*列名*/
@b VarChar(50)/*查询参数*/
as
begin
declare @sql as varchar(100)
set @tabel=@tabel
set @b=@b
set @sql = 'select ID from '+@tabel+' where '+@a+' = ''@b'''/*改过之后不管什么条件查询都提有,不知哪又不对了*/
exec(@sql)
end
行者无疆-Kevin 2009-04-12
  • 打赏
  • 举报
回复
set @sql='select * from '+@tabel+' where '+@b+' ='''gggg''''/

GGG生成的语句必须带单引号
我姓区不姓区 2009-04-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ghghg007 的回复:]
不加引就执行不了,
[/Quote]
不是让你不加,而是你加的不够:

set @sql='select * from '+@tabel+' where '+@b+' =''gggg'''
ghghg007 2009-04-12
  • 打赏
  • 举报
回复
不加引就执行不了,
我姓区不姓区 2009-04-12
  • 打赏
  • 举报
回复
单引号的问题,你不加单引号,sql server 就把你这个查询条件当成是列名了
phper2008 2009-04-12
  • 打赏
  • 举报
回复
set @sql='select * from '+@tabel+' where '+@b+' ="gggg"'
for try
ghghg007 2009-04-12
  • 打赏
  • 举报
回复
请高手给我看看
zzxap 2009-04-12
  • 打赏
  • 举报
回复
[code=SQL]
set @sql='select * from '+@tabel+' where '+@b+' =''gggg'''
[/CODE]
ghghg007 2009-04-12
  • 打赏
  • 举报
回复
解决了,我把
set @tabel=@tabel
set @b=@b
这两句在后来的调试中给删了,运行正常。
谢ojlovecd 的大力帮助。
我姓区不姓区 2009-04-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 ghghg007 的回复:]
也就是说不管条件真假返回的都是一种结果。
加入select @sql这和没有加返回的结果相反,但不管条件真假返回的都是一种结果。
我想还储存过程不对
[/Quote]
我8楼的存储过程是没有问题的,我已经测试过了,你还是好好检查下你的程序吧,
要学会自己加断点调试
ghghg007 2009-04-12
  • 打赏
  • 举报
回复
也就是说不管条件真假返回的都是一种结果。
加入select @sql这和没有加返回的结果相反,但不管条件真假返回的都是一种结果。
我想还储存过程不对
ghghg007 2009-04-12
  • 打赏
  • 举报
回复

if (dr.Read()) /*这个不管有!还是没有!都达不到效果*/
{
r = "1";
}
我姓区不姓区 2009-04-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ghghg007 的回复:]
public string seach(string tabel,string a,string b)
{
data.Open();
SqlCommand comm = new SqlCommand("Search", data.con);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@tabel", SqlDbType.VarChar, 10)).Value = tabel ;
comm.Parameters.Add(new SqlParameter("@a", SqlDbType.VarChar, 10)).Value = a;
comm.Parameters.Add(new SqlParameter("@b", SqlDbType.VarChar, 50)).Value = b;
SqlDataReader dr = data.ExecSql(comm);
string r = "0";
if (!dr.Read())
{
r = "1";
}
data.Close();
data.Dispose();
return r;
}
}

[/Quote]
你的程序有问题吧?怎么会Read不出来的时候返回1呢?
ghghg007 2009-04-12
  • 打赏
  • 举报
回复
select @sql--你输出出这段代码看看
放进之后又提示没有
行者无疆-Kevin 2009-04-12
  • 打赏
  • 举报
回复
ALTER proc [dbo].[Search]
@tabel varchar(10), /*表名*/
@a varchar(10),/*列名*/
@b VarChar(50)/*查询参数*/
as
begin
declare @sql as varchar(100)
set @tabel=@tabel
set @b=@b
set @sql = 'select ID from '+@tabel+' where '+@a+' = ''@b'''/*改过之后不管什么条件查询都提有,不知哪又不对了*/
select @sql--你输出出这段代码看看
exec(@sql)
end
ghghg007 2009-04-12
  • 打赏
  • 举报
回复

/// <summary>
///search 对表进行查询 返回1表示有,0表示没有
/// </summary>
/// <param name="tabel">要查询的表名</param>
/// <param name="a">要查询的列名</param>
/// <param name="b">要查询的参数</param>
public string seach(string tabel,string a,string b)
{
data.Open();
SqlCommand comm = new SqlCommand("Search", data.con);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@tabel", SqlDbType.VarChar, 10)).Value = tabel ;
comm.Parameters.Add(new SqlParameter("@a", SqlDbType.VarChar, 10)).Value = a;
comm.Parameters.Add(new SqlParameter("@b", SqlDbType.VarChar, 50)).Value = b;
SqlDataReader dr = data.ExecSql(comm);
string r = "0";
if (!dr.Read())
{
r = "1";
}
data.Close();
data.Dispose();
return r;
}
}


这是我的程序代码
ghghg007 2009-04-12
  • 打赏
  • 举报
回复

set @sql = 'select ID from '+@tabel+' where '+@a+'='''+@b+''''/*是三个,提交查询参数后,(比如查询列名A是否有参数@b时总是提示有*/

62,046

社区成员

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

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

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

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