誰かを助けることができます。私はまだかなり新しいSQL /プログラミングですので、これは疑問に答えるのは簡単かもしれません。SQLで変数を宣言する
以下のスクリプトでは、@startdate、@enddate、および@ result1rowcountという3つの変数が宣言されていないというエラーが表示されます。私はそれらの宣言をさらに下に動かすことができ、それはうまくいくことを知っています。しかし、私は、なぜ私はすでに開始時に変数を宣言しているので、以下のようにできないのかという理論を理解したい。それらの宣言はある時点で失われなければならない。いつ私には分かりませんか?誰かがなぜエラーを返すのかを説明することができれば、それは素晴らしいだろう。私はそのように書き直す方法についての提案は望まない。
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)**
ありがとうございました。今、完璧な意味合いがあります。 –
"GO"はSQLコマンドではありません。これはプロセッサ(ほとんどの場合、SQL Server Management Studioだけでなく、OSQL.exeやISQL.exeなどのユーティリティ)へのコマンドで、長いスクリプトを「バッチ」に分けます。 SQL Server自体には「GO」コマンドが表示されず、実行された場合に何を処理するのかわかりません。 :-) – pmbAustin