我目前有以下存储过程;
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中,从而减少对这些声明变量的需求?
非常感谢您为这两个问题提供的任何帮助。
;-)
发布于 2009-08-26 13:13:03
在第一次选择之后,您可以执行此操作来设置@allocation
set @allocation = @tmp_pledge / @recepients至于提高效率,它已经相当高效了--您不会减少任何步骤,但您可以将代码压缩一点:
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成员的需要。
发布于 2009-08-26 13:20:34
1) @tmp_pledge /@接收者-我假设分配是TBL_CAMPAIGNS中某种形式的数字字段,在varchar中包含数字不是一个好主意。
2)您只需要构建一个select,它返回来自另一个表的所有值和与要插入的列匹配的参数。
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_NoRecipientsFROM tbl_AddressBookMaster WHERE addMaster_UserId = @tmp_Id和addMaster_Key = @tmp_AddyBook;
SELECT @tmp_IDENTITY = SCOPE_IDENTITY() --返回新添加的身份ID
发布于 2009-08-26 13:23:04
set @allocation = @tmp_pledge / (@recepients* 1.0)你想这样做,因为否则你会遇到整数数学,结果会四舍五入为整数。
https://stackoverflow.com/questions/1334547
复制相似问题