我一直在编写这个存储过程,而我对存储过程是一种新的东西。我一直试图把插入到循环,但逻辑是不正确的。存储过程只从临时表中插入一条记录
基本上,下面的存储过程只将最后一行插入表中。 但是,当我打印出临时表时,它会正确显示所有数据,但不知何故插入/更新无法正常工作
下面是存储过程的脚本。谁能告诉我,我在这里错过了什么?
--exec [dbo].[spAddIntoTemplateCalculationsTable] @templateID=1,@parameterList='0:C:Test:True:0,0:B:TEST2:False:0,0:A-b/c*a::False:0',
[email protected] = 'test'
ALTER PROCEDURE [dbo].[spAddIntoTemplateCalculationsTable]
( -- Add the parameters for the stored procedure here
@templateID nvarchar(max),
@parameterList nvarchar(max),
@EmployeeNo nvarchar(16)
)
AS
BEGIN
Declare @ErrorNo integer = '',
@ErrorMessage nvarchar(max) = '',
@SPName nvarchar(max) = ''
DECLARE @paramID nvarchar(MAX),@formula nvarchar(MAX), @property nvarchar(MAX),@samplesRequired nvarchar(MAX),@tUnitOfMeasures_id int,
@Pos int,@strSampleData nvarchar(MAX),@IntCounter int,@test int
DECLARE @tmpParameterParam table
(
paramID nvarchar(MAX),
formula nvarchar(MAX),
property nvarchar(MAX),
samplesRequired nvarchar(MAX),
tUnitOfMeasures_id int
)
SET @parameterList = LTRIM(RTRIM (@parameterList))+ ','
SET @Pos = CHARINDEX (',', @parameterList,1)
--SET @IntCounter = 1
IF REPLACE(@parameterList, ',' , '') <> ''
begin
WHILE @Pos > 0
BEGIN
SET @strSampleData = LTRIM(RTRIM(LEFT(@parameterList, @Pos -1)))
IF @strSampleData <> ''
BEGIN
set @paramID = substring(@strSampleData,0, CHARINDEX(':',@strSampleData,0))
--Remove the substring and move the string to the next token(column)
set @strSampleData = substring(@strSampleData, LEN(@paramID)+2, LEN(@strSampleData))
set @formula = substring(@strSampleData,0, CHARINDEX(':',@strSampleData,0))
--Remove the substring and move the string to the next token(column)
set @strSampleData = substring(@strSampleData, LEN(@formula)+2, LEN(@strSampleData))
--update tSpecScaleValidation set LastTriggeredTime=getdate() where id= @tSpecScaleValidation_id
set @property = substring(@strSampleData,0, CHARINDEX(':',@strSampleData,0))
set @strSampleData = substring(@strSampleData, LEN(@property)+2, LEN(@strSampleData))
set @samplesRequired = substring(@strSampleData,0, CHARINDEX(':',@strSampleData,0))
set @strSampleData = substring(@strSampleData, LEN(@samplesRequired)+4, LEN(@strSampleData))
set @tUnitOfMeasures_id = substring(@strSampleData,0, CHARINDEX(':',@strSampleData,0))
--to get the last token from the string(column)
set @tUnitOfMeasures_id = substring(@strSampleData, LEN(@tUnitOfMeasures_id)+1, LEN(@strSampleData))
insert into @tmpParameterParam
--select @IntCounter,@strSampleData
select @paramID,@formula,@property,@samplesRequired,@tUnitOfMeasures_id
END
SET @parameterList = RIGHT(@parameterList, LEN (@parameterList) - @Pos)
set @Pos = CHARINDEX(',', @parameterList,1)
SET @IntCounter = @IntCounter + 1
END
END
begin transaction t1
begin try
declare @setno int
select * from @tmpParameterParam
--begin
if EXISTS (SELECT * FROM tTemplate_Calculation where id = @paramID)
update tTemplate_Calculation
set [email protected],
property = @property ,
[email protected],
[email protected]_id
where id = @paramID
else
insert into tTemplate_Calculation
select @templateID,@formula,@property,@samplesRequired,@tUnitOfMeasures_id,@EmployeeNo,getdate()
FROM @tmpParameterParam
--end
commit transaction t1
end try
Begin Catch
Select
@ErrorMessage = ERROR_MESSAGE(),
@SPName = ERROR_PROCEDURE(),
@ErrorMessage = ERROR_MESSAGE();
rollback transaction t1
select @ErrorMessage
End Catch
END
我试图插入和更新基于临时表的记录。但它只是插入最后一行 –
也,我有一个检查,如果paramID为0,它应该插入,否则,更新表 –
这将失败,当表是空的转换nvarchar值时转换失败'错误? “当用exec [dbo]执行时,数据类型位和任何内容都不会被插入[spAddIntoTemplateCalculationsTable] @ templateID = 1,@ parameterList ='0:C:Test:True:0,0:B:TEST2:Fals e:0, 0:Ab/c * a :: False:0',@EmployeeNo ='test',显示的3行是过程中的调试选择语句。 –