我编写了一个使用输出变量的存储过程。存储过程运行良好,我知道这是事实。我可以使用下面的代码片段运行存储过程
DECLARE @return_value int,
@coEfficientAlpha float
EXEC @return_value = [dbo].[getTestCoEfficientAlphaByDasIdAndKeyStandard]
@dasId = 4001,
@keyStandardId = 960,
@coEfficientAlpha = @coEfficientAlpha OUTPUT
SELECT @coEfficientAlpha as N'@coEfficientAlpha'
SELECT 'Return Value' = @return_value
GO
但是当我从我的其他存储过程中调用这个过程时getTestReliabilityOnDasId
,我收到一个
列名无效
错误信息。我在这两个程序中都没有做任何奇怪的事情。有任何想法吗?
如果需要,我会发布更多代码。
编辑:
我的 2 个存储过程的代码如下:
好的,定义getTestCoEfficientAlphaByDasIdAndKeyStandard
是
ALTER procedure [dbo].[getTestCoEfficientAlphaByDasIdAndKeyStandard]
@dasId int,
@keyStandardId int,
@coEfficientAlpha float output
as
--declare @dasId int
--set @dasId = 4001
--declare @keyStandardId int
--set @keyStandardId = 960
-- used all over query
select qa.*, dq.dasQuestionId
into #temp
from test t
inner join question q on t.testId = q.testId
inner join questionAnswer qa on q.questionId = qa.questionId
inner join dasQuestion dq on t.dasId = dq.dasId and q.questionNumber = dq.questionNumber
inner join keyStandardDasQuestion ksdq on dq.dasQuestionId = ksdq.dasQuestionId
where t.dasId = @dasId
and q.questionTypeId = 2
and ksdq.keyStandardId = @keyStandardId
-- used later in query
select tb1.DasQuestionId, sum(square(tb1.score - tb2.avgScore))/count(tb1.score) as qSd2
into #questions
from #temp tb1
inner join (
select questionId, sum(score)/cast(count(score) as float) as avgScore
from #temp
group by questionId
)tb2 on tb1.questionId = tb2.questionId
group by tb1.dasQuestionId
-- used later in query
select studentNo, sum(score) as studentTestScore, count(score) as cntTestScore
into #testData
from #temp
group by studentNo
-- average number of questions correct on test
declare @avgTScore float
set @avgTScore = (
select sum(studentTestScore) / cast(count(studentTestScore) as float) from #testData
)
-- average variance of questions right on test
declare @tSd2 float
set @tSd2 = (
select sum(xMinusMean)/count(xMinusMean) as tSd2
from (
select (t.studentTestScore - @avgTScore)*(t.studentTestScore - @avgTScore) as xMinusMean
from #testData t
)tb1
)
set @coEfficientAlpha = (
select (count(distinct dasQuestionId)/ (cast(count(distinct dasQuestionId) as float) - 1))*(1-((select sum(qSd2) from #questions)/@tSd2)) as coEfficientAlpha
from #temp
)
drop table #temp, #questions , #testdata
的定义getTestReliabilityOnDasId
是
ALTER procedure [dbo].[getTestReliabilityOnDasId]
@dasId int
as
--declare @dasId int
--set @dasId = 4001
select ROW_NUMBER() OVER(order by ks.keyStandardId asc) AS rowNumber,
da.dasId, da.title, ks.keyStandardId, ks.keyStandardText, count(dq.dasQuestionId) as countQuestions
into #temp
from districtAssessment da
inner join dasQuestion dq on da.dasId = dq.dasId
inner join keyStandardDasQuestion ksdq on dq.dasQuestionId = ksdq.dasQuestionId
inner join keyStandard ks on ksdq.keyStandardId = ks.keyStandardId
where da.dasId = @dasId
group by da.dasId, da.title, ks.keyStandardId, ks.keyStandardText
create table #KeyStandards(
[keyStandardId] int,
coEfficientAlpha float
)
declare @numRows int
select @numRows = max(rowNumber)
from #temp
declare @keyStandardId int, @rowNumber int
set @rowNumber = 1
DECLARE @return_value int,
@coEfficientAlpha float,
@numQuestions int
WHILE @rowNumber <= @numRows
BEGIN
set @keyStandardId = (
select keyStandardId
from #temp
where rowNumber = @rowNumber )
set @numQuestions = (select countQuestions from #temp where keyStandardId = @keyStandardId )
if @numQuestions > 1
begin
EXEC @return_value = [dbo]. [getTestCoEfficientAlphaByDasIdAndKeyStandard]
@dasId = @dasId,
@keyStandardId = @keyStandardId,
@coEfficientAlpha = @coEfficientAlpha OUTPUT
end
insert into #keyStandards
select @keyStandardId, case when @coEfficientAlpha is null then 'Not Enough Questions' else @coEfficientAlpha end
set @rowNumber = @rowNumber + 1
END
select t.*, k.coEfficientAlpha
from #temp t
inner join #keyStandards k on t.keyStandardId = k.keyStandardId
drop table #temp, #KeyStandards
我得到的确切错误消息是:
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 33 行
无效的列名称“questionId”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 31 行
无效的列名称“questionId”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 31 行
无效的列名称“分数”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 31 行
无效的列名称“分数”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 34 行
无效的列名称“questionId”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 35 行
无效列名称“dasQuestionId”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 27 行
无效的列名称“DasQuestionId”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 27 行
无效的列名称“分数”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 27 行
无效的列名称“分数”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 41 行
无效的列名称“studentNo”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 38 行
无效的列名称“studentNo”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 38 行
无效的列名称“分数”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 38 行
无效的列名称“分数”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 66 行
无效列名称“dasQuestionId”。
消息 207,级别 16,状态 1,过程 getTestCoEfficientAlphaByDasIdAndKeyStandard,第 66 行
无效列名称“dasQuestionId”。
注意:如果我运行,getTestReliabilityOnDasId
我会收到这些错误消息。如果我运行getTestCoEfficientAlphaByDasIdAndKeyStandard
然后getTestReliabilityOnDasId
在单独的查询窗口中运行,那么一切运行正常。这几乎就像 SQL Server 引擎必须预热或其他东西......