如何权衡代码重用与效率之间的关系

IMAGSE 2008-12-02 11:30:29
大家好,最近项目紧,好久没有上坛子和大家见面了。
今天整理东西项目内容时候发现一个问题,想了好久没有结果
希望和大家一起探讨。

问题是这样的:举例说明就是在数据库中查询内容的时候,有大概30张左右的表,
他们中都有一个ID字段和另一个表关联起来,联系就是靠这个ID
然后,要查询数据的时候,每次都带着这个ID去这31个表中查询一下
于是我开始是做成了动态sql的写法,就是
CREATE PROCEDURE UnitXkwsSingleSelect
(
@unitID varchar(50),
@tableName char(20)
)
AS
begin
declare @sql varchar(1000)
SET @sql='SELECT * FROM (T_UnitInformation LEFT JOIN '+ @tableName +' ON UI_ID=unitID WHERE cast(unitID AS varchar(50)) =' + @unitID
exec(@sql)
end
GO


这样,每次要查询的时候,我就在程序中写入了动态传递tableName的这个参数就可以了。
省去了如果分开写存储过程的话,要写30个除了表名不同外,其他内容都一样的存储过程。
感觉那样是在太乱了,数据库中的存储过程一下子多了好多。
现在用1个当30个用,我忽然有想到会不会影响效率?
因为对这方面涉足不深,所以不解,谢谢各位!
...全文
388 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2008-12-11
  • 打赏
  • 举报
回复
1楼2楼的可以防SQL注入攻击,
后面的都防不了。
DalyQiao 2008-12-10
  • 打赏
  • 举报
回复
有点点差别,因为你的代码不是预编译的,所以每次数据库发现字符串不一样,会做一个编译过程,不过已经编译会放在缓存中.这么简单的语句,这种差别可以略掉
hyj12345678 2008-12-09
  • 打赏
  • 举报
回复

关注,效率上基本没有差别。
ywsjb1 2008-12-09
  • 打赏
  • 举报
回复
学习一下,正在做数据库的相关工作。
IMAGSE 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 lxl_sports 的回复:]
谈到 性能的问题 我就头大。。。
还好 现在的机器 配置都比较高。。。访问量如果不是很大的话。。。怎么写都应该没有问题的。。。(我是胡说的。。。)


还是向高手学习哦。。。。
[/Quote]

昨天有看到你提的关于技术分排名的问题,那个是每周或者每两周才排一次的,所以你的因为刚刚申请,所以没有变化的
lxl_sports 2008-12-04
  • 打赏
  • 举报
回复
谈到 性能的问题 我就头大。。。
还好 现在的机器 配置都比较高。。。访问量如果不是很大的话。。。怎么写都应该没有问题的。。。(我是胡说的。。。)


还是向高手学习哦。。。。
IMAGSE 2008-12-04
  • 打赏
  • 举报
回复
up一下~ 一会结贴

希望还有建议的请积极发言哦~
lxl_sports 2008-12-04
  • 打赏
  • 举报
回复
哦 谢谢你啊 我还以为我的号有什么问题呢了 呵呵
IMAGSE 2008-12-03
  • 打赏
  • 举报
回复
加分成功,继续讨论~

up有分~
zpcoder 2008-12-03
  • 打赏
  • 举报
回复

但当,在存储过程中能这样工作就更好,把整整个参量表,及规则当参数传给存储过程. 然后在存储过程中编程得到最终的字符串。

exec 这个字符串 应该应行了。
zpcoder 2008-12-03
  • 打赏
  • 举报
回复

我比较喜欢直接在 C# 中拼字符串。例如:

     public static string sqlstr(string tabName1,……)
{
StringBuilder sb = new StringBuilder();
sb.Append("SELECT …… FROM ");
sb.Append(tabName1);//这样拼接
sb.Append("WHERE A.Id=@aid");//这里也有可以用参数

//还可能这样拼接

string strsql = "select productId,{0} from {1} where {2}";

strsql = string.Format(sqlstr, "productName", "tb_Product", "categoryId=2");
}


这只是个说明的例子,实际应用中用C#来这样拼接也非常灵活,方便,欢迎楼下提更了的方法
liubin911 2008-12-03
  • 打赏
  • 举报
回复
有的时候我也喜欢这么写,省事




CREATE PROCEDURE sp_selectBase
(@Sel varchar(200),--查看条数()
@TableName varchar(30) ,--表名
@SqlWhere varchar(300) --条件(如where UserName='admin')
)

AS

EXEC ('select '+@Sel+' from '+@TableName+' '+@SqlWhere )


liubin911 2008-12-03
  • 打赏
  • 举报
回复
这样做省去了写存储过程的时间,页方便以后的维护,仅有的缺点就是select * 查找出的无用数据很多
IMAGSE 2008-12-03
  • 打赏
  • 举报
回复
up一下,欢迎大家继续讨论,一会11点的时候再加100分
qq2013 2008-12-03
  • 打赏
  • 举报
回复
ding
iuhxq 2008-12-03
  • 打赏
  • 举报
回复
我会用1个存储过程
twin21cn 2008-12-03
  • 打赏
  • 举报
回复
这种查询通用性好,性能影响不是太大。
fuzijing 2008-12-03
  • 打赏
  • 举报
回复
up
zcl26 2008-12-03
  • 打赏
  • 举报
回复
卜酷塔,帮你盖楼吧,呵呵
cwmwss 2008-12-03
  • 打赏
  • 举报
回复
总是能查出来就行了,从没考虑这些问题,学习了
加载更多回复(16)

62,268

社区成员

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

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

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

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