首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程计算和性能改进

存储过程计算和性能改进
EN

Stack Overflow用户
提问于 2009-08-26 13:06:57
回答 3查看 1.8K关注 0票数 2

我目前有以下存储过程;

代码语言:javascript
复制
CREATE PROCEDURE web.insertNewCampaign
   (
   @tmp_Id BIGINT,
   @tmp_Title VARCHAR(100),
   @tmp_Content VARCHAR(8000),
   @tmp_Pledge DECIMAL(7,2),
   --@tmp_Recipients BIGINT,
   @tmp_Date DATETIME,
   @tmp_Private BIT,
   @tmp_Template BIGINT,
   @tmp_AddyBook BIGINT
   )
AS
   declare @recipients BIGINT
   declare @tmp_IDENTITY BIGINT
   declare @fave BIGINT
   declare @allocation VARCHAR(50)

   --insert campaign data
   BEGIN TRAN
   SELECT @recipients = addMaster_NoRecipients FROM tbl_AddressBookMaster 
   WHERE addMaster_UserId = @tmp_Id AND addMaster_Key = @tmp_AddyBook;
   INSERT INTO TBL_CAMPAIGNS ([campaign_MemberId], [campaign_Title], [campaign_Content], [campaign_Pledge], [campaign_Date], [campaign_Private], [campaign_Template], [campaign_AddressBook], [campaign_Recipients]) 
   VALUES (@tmp_Id, @tmp_Title, @tmp_Content, @tmp_Pledge, @tmp_Date, @tmp_Private, @tmp_Template, @tmp_AddyBook, @recipients)
   SELECT @tmp_IDENTITY = SCOPE_IDENTITY() --this returns the newly added IDENTITY ID
   COMMIT
......

所以我有两个问题:

1)如何将分配除以@recipients得到@ @tmp_Pledge例如:( @allocation = @tmp_Pledge / @recipients)

2)有没有可能将这些语句组合成一个更有效的语句,并将@allocation有效地作为值插入到列campaign_RecipShare中,从而减少对这些声明变量的需求?

非常感谢您为这两个问题提供的任何帮助。

;-)

EN

回答 3

Stack Overflow用户

发布于 2009-08-26 13:13:03

在第一次选择之后,您可以执行此操作来设置@allocation

代码语言:javascript
复制
set @allocation = @tmp_pledge / @recepients

至于提高效率,它已经相当高效了--您不会减少任何步骤,但您可以将代码压缩一点:

代码语言:javascript
复制
INSERT INTO TBL_CAMPAIGNS (
    [campaign_MemberId], [campaign_Title], [campaign_Content], 
    [campaign_Pledge], [campaign_Date], [campaign_Private], 
    [campaign_Template], [campaign_AddressBook], [campaign_Recipients],
    [capmain_RecipShare]) 
SELECT 
    @tmp_Id, @tmp_Title, @tmp_Content, 
    @tmp_Pledge, @tmp_Date, @tmp_Private, 
    @tmp_Template, @tmp_AddyBook, addMaster_NoRecipients,
    @tmp_Pledge / addMaster_NoReceipients as Allocation
FROM
    tbl_AddressBookMaster
WHERE
    addMaster_UserId = @tmp_Id
    AND addMaster_Key = @tmp_AddyBook

SELECT @tmp_IDENTITY = SCOPE_IDENTITY() --this returns the newly added IDENTITY ID

这还消除了在insert语句之外计算@allocation成员的需要。

票数 1
EN

Stack Overflow用户

发布于 2009-08-26 13:20:34

1) @tmp_pledge /@接收者-我假设分配是TBL_CAMPAIGNS中某种形式的数字字段,在varchar中包含数字不是一个好主意。

2)您只需要构建一个select,它返回来自另一个表的所有值和与要插入的列匹配的参数。

代码语言:javascript
复制
insert into TBL_CAMPAIGNS ([campaign_MemberId], [campaign_Title], [campaign_Content],    [campaign_Pledge], [campaign_Date], [campaign_Private], [campaign_Template], [campaign_AddressBook], [campaign_Recipients], [campaign_allocation) 

select @tmp_Id, @tmp_Title, @tmp_Content, @tmp_Pledge, @tmp_Date, @tmp_Private, @tmp_Template, @tmp_AddyBook, addMaster_NoRecipients, @tmp_pledge / addMaster_NoRecipients

FROM tbl_AddressBookMaster WHERE addMaster_UserId = @tmp_Id和addMaster_Key = @tmp_AddyBook;

SELECT @tmp_IDENTITY = SCOPE_IDENTITY() --返回新添加的身份ID

票数 1
EN

Stack Overflow用户

发布于 2009-08-26 13:23:04

代码语言:javascript
复制
set @allocation = @tmp_pledge / (@recepients* 1.0)

你想这样做,因为否则你会遇到整数数学,结果会四舍五入为整数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1334547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档