2013-03-27 42 views
1

我使用SQL Server 2008SQL Server select sql_variant平等不起作用?

我有一個名爲數據類型sql_VariantvarEnteredValue列。

當我執行以下select語句我沒有得到任何

SELECT * FROM tblname WHERE varEnteredValue = 1 

通知我有一個價值1個多值此列

問題

哪有我解決了這個問題?我是否需要轉換數據類型?

+1

確定嗎?我不能複製:http://sqlfiddle.com/#!3/cb0da/1 - 我不會建議存儲與該數據類型... – sgeddes 2013-03-27 17:23:30

回答

8

有兩個問題在這裏:

  1. 您需要的值轉換從SQL_VARIANTINT
  2. 您需要小心如何轉換值,因爲並非列中的每個值都必須轉換爲INT,並且可能難以預測SQL Server是先過濾還是先嚐試轉換。如果值是數字,則需要首先進行測試,爲此,必須將其顯式轉換爲字符串。

這裏是圍繞這兩個問題工作的例子:

WHERE CASE WHEN ISNUMERIC(CONVERT(VARCHAR(32), varEnteredValue)) = 1 
    THEN CONVERT(FLOAT, varEnteredValue) ELSE 0 END = 1; 

你爲什麼要使用SQL_VARIANT

+0

我得到以下錯誤:Msg 8116,Level 16,State 1,行1 參數數據類型sql_variant對於isnumeric函數的參數1無效。 – 2013-03-27 17:25:31

+2

@Mina對不起,我應該添加2a。請嘗試顯式轉換。 – 2013-03-27 17:28:45

+0

現在得到此錯誤:Msg 245,Level 16,State 1,Line 1 將nvarchar值「3.3」轉換爲數據類型int時轉換失敗。 – 2013-03-27 17:29:08