我不明白髮生了什麼事情。如何在SELECT語句中將聲明變量的NULL值設置爲?
DECLARE @X DATETIME;
--FIRST
SELECT @X = ContractDate
FROM dbo.Foo C
WHERE ProjectCode = 120125
AND VersionID = (SELECT MIN(VersionID)
FROM dbo.Foo
WHERE ProjectCode = C.ProjectCode)
SELECT @X
--SECOND
SELECT @X = ContractDate
FROM dbo.Foo C
WHERE ProjectCode = 130192
AND VersionID = (SELECT MIN(VersionID)
FROM dbo.Foo
WHERE ProjectCode = C.ProjectCode)
SELECT @X
第一 'SELECT @X' 必須返回 '2012年9月10日',Second'SELECT @X」必須返回 'NULL',但第二個返回 '2012年9月10日'。
第一個問題:爲什麼第二個'SELECT @X'返回NULL?
上面的代碼塊在WHILE
語句中。原來的代碼是在這裏:
DECLARE @ProjectCode NVARCHAR(10)
DECLARE CRS CURSOR FOR
SELECT P.ProjectCode
FROM dbo.Foo P
OPEN CRS
FETCH NEXT FROM CRS INTO @ProjectCode
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @ProjectContractDate_T0 DATETIME;
SELECT @ProjectContractDate_T0 = ContractDate
FROM dbo.FooFoo C
WHERE ProjectCode = @ProjectCode
AND VersionID = (SELECT MIN(VersionID)
FROM dbo.FooFoo
WHERE ProjectCode = C.ProjectCode)
SELECT @ProjectContractDate_T0
FETCH NEXT FROM CRS INTO @ProjectCode
END
CLOSE CRS
DEALLOCATE CRS
while循環處理:
- 時
ProjectCode = 120125
,@ProjectContractDate_T0
是 '2012年9月10日',
那麼接下來
Projectcode = 130192
,@ProjectContractDate_T0
必須爲NULL,但爲'2012-09-10'。
這怎麼可能?
在while循環中,爲什麼ProjectContractDate_T0
重置爲NULL?
你需要打印出所有的值和調試,我把它看作是數據相關的,我們對涉及的數據沒有任何想法 – TheGameiswar
這是一個經典的關於數據庫的「過程式」方法,並不像說明錯誤的代碼那樣具有建設性。它應該是: SELECT P.ProjectCode,C.ContractDate FROM dbo.Foo P LEFT OUTER JOIN dbo.FooFooÇ ON( C.ProjectCode = P.ProjectCode AND C.VersionID =( SELECT MIN (VERSIONID) FROM dbo.FooFoo變量C_min WHERE C_Min.ProjectCode = P.ProjectCode ) –