簡體   English   中英

將值傳遞到SQL Server 2008中的表后如何獲得行?

[英]How to get a row after passing value into the table in SQL Server 2008?

我有一個名為Test的表

Test
Name   Value1(varchar)   Value2(varchar)
A          1                  9
B          10                 19
C          20                 39
D          40                 45
...        ...                ...

現在,當我發送“ 8”或“ 21”等值時,如何從測試表中獲取名稱

嗯,為什么您的列為VARCHAR

DECLARE @n INT = 8;

SELECT Name FROM dbo.Test
  WHERE @n BETWEEN CONVERT(INT, Value1) AND CONVERT(INT, Value2);

如果這些列中還有其他垃圾,則可能必須執行以下操作,以防止SQL Server超越您並試圖將'ascfdgt'轉換為整數:

DECLARE @n INT = 8;

SELECT Name FROM dbo.Test
  WHERE ISNUMERIC(Value1) = 1
    AND ISNUMERIC(Value2) = 1
    AND @n BETWEEN CASE WHEN ISNUMERIC(Value1) = 1 THEN CONVERT(INT, Value1) END
               AND CASE WHEN ISNUMERIC(Value2) = 1 THEN CONVERT(INT, Value2) END;

現在,請修復此列的數據類型,或將這些數字存儲在其他列中。

如果您傳遞A12並需要查找其中Value1A010Value2A029行,那么它將變得更加復雜:

DECLARE @n VARCHAR(12) = 'A12';

SELECT Name FROM dbo.Test
  WHERE ISNUMERIC(SUBSTRING(Value1, 2, 255)) = 1
    AND ISNUMERIC(SUBSTRING(Value2, 2, 255)) = 1
    AND CONVERT(INT, SUBSTRING(@n, 2, 255)) 
      BETWEEN CASE WHEN ISNUMERIC(SUBSTRING(Value1, 2, 255)) = 1
        THEN CONVERT(INT, SUBSTRING(Value1, 2, 255)) END
          AND CASE WHEN ISNUMERIC(SUBSTRING(Value2, 2, 255)) = 1
        THEN CONVERT(INT, SUBSTRING(Value2, 2, 255)) END;

看到那是多么丑陋嗎? 能否請您討好,請考慮修復這個糟糕的設計,這樣就不必在這樣的意大利面條查詢中亂扔代碼庫了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM