[英]SQL Server stored procedure
I want it to count then if @intcount > 0
it should show data or else no data found, but when I execute it gives me 'no data found' regardless, what am I doing wrong? 我想要它计算,
if @intcount > 0
它应该显示数据或者没有找到数据,但是当我执行它时,我发现'没有找到数据',我做错了什么?
@FiscalYear int,
@SchoolID int,
@Status int
AS
BEGIN
SET NOCOUNT ON;
declare @sqlstr varchar(2000)
declare @intCount int
set @intCount = 0
set @sqlstr = 'Select @intCount = Count(*)
From PrivateSchool left outer join Attachment on Attachment.PrivateSchoolID = PrivateSchool.PrivateSchoolID
inner join FiscalYearPrivateSchool fp ON fp.PrivateSchoolID = PrivateSchool.PrivateSchoolID
Where (FiscalYear = '+convert(varchar, @FiscalYear)+') AND (PrivateSchool.IsActive = 1)'
IF (@SchoolID != -1)
SET @sqlstr = @sqlstr + ' AND SchoolID ='+ convert(varchar, @SchoolID)
IF (@Status = -1)
SET @sqlstr = @sqlstr + ' AND PrivateSchool.PrivateSchoolID = PrivateSchool.PrivateSchoolID'
Else IF (@Status = 1)
SET @sqlstr = @sqlstr + ' AND Attachment.PrivateSchoolID = PrivateSchool.PrivateSchoolID'
Else
SET @sqlstr = @sqlstr + ' AND Attachment.PrivateSchoolID is Null'
If (@intCount > 0)
BEGIN
set @sqlstr= 'Select SchoolName as School,
(Case when Attachment.PrivateSchoolID = PrivateSchool.PrivateSchoolID THEN ''Uploaded''
ELSE ''Not Uploaded'' END) AS Status,
COUNT(Attachment.PrivateSchoolID) AS [Count]
From PrivateSchool left outer join Attachment on Attachment.PrivateSchoolID = PrivateSchool.PrivateSchoolID
inner join FiscalYearPrivateSchool fp ON fp.PrivateSchoolID = PrivateSchool.PrivateSchoolID
Where (FiscalYear = '+convert(varchar, @FiscalYear)+') AND (PrivateSchool.IsActive = 1)'
IF (@SchoolID != -1)
SET @sqlstr = @sqlstr + ' AND SchoolID ='+ convert(varchar, @SchoolID)
IF (@Status = -1)
SET @sqlstr = @sqlstr + ' AND PrivateSchool.PrivateSchoolID = PrivateSchool.PrivateSchoolID'
Else IF (@Status = 1)
SET @sqlstr = @sqlstr + ' AND Attachment.PrivateSchoolID = PrivateSchool.PrivateSchoolID'
Else
SET @sqlstr = @sqlstr + ' AND Attachment.PrivateSchoolID is Null'
SET @sqlstr = @sqlstr + ' Group by SchoolName, Attachment.PrivateSchoolID, PrivateSchool.PrivateSchoolID'
SET @sqlstr = @sqlstr + ' Order By SchoolName'
EXEC(@sqlstr)
END
ELSE
Select 'No Data Found' as 'FileUpload'
END
You need: 你需要:
EXEC sp_executesql @sqlstr, N'@intCount INT OUTPUT', @intCount = @intCount OUTPUT;
IF (@intCount > 0)
BEGIN
....
END
You'll also need to make @sqlstr NVARCHAR(2000)
and add set it to N'SELECT ...'
as opposed to 'SELECT ...'
- that leading N can be important. 您还需要制作
@sqlstr NVARCHAR(2000)
并将其设置为N'SELECT ...'
而不是'SELECT ...'
- 前导N可能很重要。
The problem is: 问题是:
declare @intCount int
set @intCount = 0
...
<a bunch of code where @intcount doesn't change>
If (@intCount > 0)
It's always going to be 0. 它总是0。
Your issue is one of scope. 您的问题是范围之一。 The EXEC(@sqlstr) command doesn't have access to the @intcount variable in your stored procedure.
EXEC(@sqlstr)命令无权访问存储过程中的@intcount变量。 I would bet if you ran this code in a query window, it would tell you to declare @intcount.
我敢打赌,如果你在查询窗口中运行此代码,它会告诉你声明@intcount。
Listen to YUCK and rewrite this to avoid dynamic SQL, and then your SELECT will be able to set the @intcount variable. 听YUCK并重写它以避免动态SQL,然后你的SELECT将能够设置@intcount变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.