Ich hoffe, jemand kann helfen. Ich bin noch ziemlich neu in SQL/Programmierung, also könnte dies eine leicht zu beantwortende Frage sein.Deklarieren von Variablen in SQL
Für das folgende Skript erhalte ich einen Fehler, wo es beschwert, dass die 3 Variablen @startdate, @enddate und @ result1rowcount nicht deklariert wurden. Ich weiß, ich könnte die Deklaration von denen weiter nach unten verschieben und es würde funktionieren. Aber ich möchte die Theorie verstehen, warum es nicht wie unten erklärt werden kann, da ich die Variablen gleich am Anfang deklariert habe. Diese Erklärungen müssen irgendwann verloren gehen. Ich bin mir nicht sicher wann? Wenn jemand erklären könnte, warum es den Fehler zurückgibt, wäre das großartig. Ich möchte keine Vorschläge, wie man es als solches neu schreibt.
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 = '[email protected]',
@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)**
Vielen Dank. Macht jetzt vollkommen Sinn. –
"GO" ist kein SQL-Befehl. Es ist ein Befehl an den Prozessor (in den meisten Fällen SQL Server Management Studio, aber auch Dienstprogramme wie OSQL.exe und ISQL.exe), um lange Skripts in "Batches" zu trennen. SQL Server selbst wird niemals einen 'GO'-Befehl sehen und würde nicht wissen, was damit zu tun wäre. :-) – pmbAustin