在SQL中声明变量

在SQL中声明变量,sql,sql-server,Sql,Sql Server,希望有人能帮忙。我对SQL/编程还是相当陌生的,所以这可能是一个容易回答的问题 对于下面的脚本,我收到一个错误,它抱怨3个变量@startdate、@enddate和@result1rowcount没有被声明。我知道我可以将这些声明进一步向下移动,它会起作用。但是我想理解这个理论,为什么它不能,如下所示,因为我已经在一开始就声明了变量。这些声明一定会在某个时候丢失。我不确定什么时候?如果有人能解释它返回错误的原因,那就太好了。我不想要关于如何重新编写的建议 SET TRANSACTION ISO

希望有人能帮忙。我对SQL/编程还是相当陌生的,所以这可能是一个容易回答的问题

对于下面的脚本,我收到一个错误,它抱怨3个变量@startdate、@enddate和@result1rowcount没有被声明。我知道我可以将这些声明进一步向下移动,它会起作用。但是我想理解这个理论,为什么它不能,如下所示,因为我已经在一开始就声明了变量。这些声明一定会在某个时候丢失。我不确定什么时候?如果有人能解释它返回错误的原因,那就太好了。我不想要关于如何重新编写的建议

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Declare @count int
Declare @r int
Declare @start datetime
Declare @end datetime
Declare @startdate datetime
Declare @enddate datetime
Declare @Result1RowCount int

Set @start = DATEADD(d,0,DATEDIFF(d,0,getdate()-1))
set @end = DATEADD(d,0,DATEDIFF(d,0,getdate()))

Create table #tempwill
(feed int,
returnid int,
ProcessStartTime datetime,
ProcessEndTime datetime,
importcount int,
Selectedstartdate datetime,
Selectedenddate datetime)

Insert into #tempwill
Select feed, returnid, processstarttime, processendtime, importcount, selectedstartdate, selectedenddate
from Will_Database.dbo.Import
where selectedstartdate = @start 
and selectedenddate = @end

SET @COUNT = (select count(*) from #tempwill where importcount ='0')

IF @Count > 0 
     Begin
           exec @r = Bill_Database.dbo.op_Mail_2005 @profile_name = 'Testserver',
               @MailTo = 'joebloggs@hotmail.com',
               @MailBCC = '',
               @importance = 'HIGH',
               @subject = 'Warning - Numbers are not as expected',
               @body = 'Please investigate as todays numbers are not what we expected '

      End


GO

**Set @startdate = DATEADD(d,0,DATEDIFF(d,0,getdate()-2))
set @enddate = DATEADD(d,0,DATEDIFF(d,0,getdate()-1))**

CREATE TABLE #Results1 (ID int, Ref int, Code int, Explanation varchar(200), Timeof datetime)

INSERT #Results1 (ID, Ref, Code, Explanation, Timeof)
SELECT A.ID, B.Ref, A.Code, A.Explanation, A.Timeof
FROM Testserver.Will_database.dbo.codetime A
INNER JOIN Testserver.Bill_database.dbo.Coderegister B ON A.Code= B.Code AND A.Ref = B.Ref
WHERE  A.Timeof >= @StartDate
AND A.Timeof < @EndDate

**SELECT @Result1RowCount = @@RowCount**

**insert into Daily_Check values
( 1, 1, @Result1RowCount, @startdate, @enddate)**

问题是因为你的GO声明就在它之前

这将其分为不同的批,并且声明的变量超出了在其中声明的批的范围


要解决此问题,只需删除GO即可。

问题在于它前面的GO语句

这将其分为不同的批,并且声明的变量超出了在其中声明的批的范围


要解决此问题,只需删除GO。

或移动到endor移动到endor。非常感谢。GO不是一个SQL命令。在大多数情况下,它是对处理器SQL Server Management Studio的命令,也是对OSQL.exe和ISQL.exe等实用程序的命令,用于将长脚本分为批。SQL Server本身永远不会看到“GO”命令,如果看到,也不知道该如何处理它:-非常感谢你。GO不是一个SQL命令。在大多数情况下,它是对处理器SQL Server Management Studio的命令,也是对OSQL.exe和ISQL.exe等实用程序的命令,用于将长脚本分为批。SQL Server本身永远不会看到“GO”命令,如果看到,也不知道该如何处理它:-