2012-12-14 20 views
0

我有一個使用名爲@Command (nvarchar(MAX))的變量的存儲過程。然後根據給定的輸入相應地添加參數。使用nvarchar(MAX)構建查詢,但是轉換在where子句中失敗

declare @Command nvarchar(max) 
if(@CaseFileID IS NOT NULL) 
BEGIN 
select @Command=' 
    select [ServerCredentialsID],[CaseFileID],EIKSLT.[LocationType],EPT.PaymentType,[TaskID],[DateActive] 
     ,[LengthOfPurchase],[Username],[Password],[IPDomain],[Port],[DES],[Website],[AmountPaid],[Latitude] 
     ,[Longitude],[HasAttachments],[TimeStamp],[CaseElement],[Temporary],[StatusID] 
     FROM Element17a_IKSServerCredentials EIKSSC 
     JOIN ElementsIKSLocationTypes EIKSLT ON EIKSSC.LocationBeingUsedID= EIKSLT.IKSLocationBeingUsedID 
     JOIN ElementsPaymentTypes EPT ON EIKSSC.PaymentMethodID=EPT.PaymentTypeID 
     where EIKSSC.CaseFileID='''+cast(@CaseFileID as nvarchar(MAX))+''' ' 

@CaseFileID被聲明爲一個int,在表中它是一個int。當我嘗試

where EIKSSC.CaseFileID = ' + @CaseFileID + ' ' 

那麼這個值甚至不顯示(錯誤,它看起來像"EIKSSC.CaseFileID= '"

我只是不明白這一點。

注:SQL Server 2008中Management Studio中

+0

@CaseFileID的值是什麼? – Melanie

+0

我只輸入9.因爲我試圖得到的CaseFileID是9 – john

回答

1

這是因爲@CaseFileID是VARCHAR,即使你沒有表現出來。
IF應該

if(@CaseFileID > '') 

如果即使不工作,那麼你需要換到左加入,因爲內部連接將刪除無法在其他2個表中匹配的記錄。

最後,由於CaseFileID是一個i​​nt,所以不需要引號。儘管SQL Server會隱式地將'9'轉換爲WHERE子句中的整數9,但這並不是必需的。

declare @Command nvarchar(max) 
if(@CaseFileID > '') 
BEGIN 
select @Command=' 
    select [ServerCredentialsID],[CaseFileID],EIKSLT.[LocationType],EPT.PaymentType,[TaskID],[DateActive] 
     ,[LengthOfPurchase],[Username],[Password],[IPDomain],[Port],[DES],[Website],[AmountPaid],[Latitude] 
     ,[Longitude],[HasAttachments],[TimeStamp],[CaseElement],[Temporary],[StatusID] 
     FROM Element17a_IKSServerCredentials EIKSSC 
     LEFT JOIN ElementsIKSLocationTypes EIKSLT ON EIKSSC.LocationBeingUsedID= EIKSLT.IKSLocationBeingUsedID 
     LEFT JOIN ElementsPaymentTypes EPT ON EIKSSC.PaymentMethodID=EPT.PaymentTypeID 
     where EIKSSC.CaseFileID='+cast(@CaseFileID as nvarchar(MAX)) 
+0

感謝您的幫助。我明確實施了你的工作。然而問題其實是我從來沒有轉換過我的其他參數。如果你可以把它放在你的答案中,讓其他人可以看到,那麼我也會很感激。我會回答我自己的問題,但你的建議似乎更深入。 – john