简体   繁体   English

将值传递到SQL Server 2008中的表后如何获得行?

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

I have a table named Test 我有一个名为Test的表

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

Now how do I get Name from Test table when I send a value like '8' or '21'etc 现在,当我发送“ 8”或“ 21”等值时,如何从测试表中获取名称

Um, why are your columns VARCHAR ? 嗯,为什么您的列为VARCHAR

DECLARE @n INT = 8;

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

If you have other junk in these columns you may have to do something like this to prevent SQL Server from outsmarting you and trying to convert 'ascfdgt' to an integer: 如果这些列中还有其他垃圾,则可能必须执行以下操作,以防止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;

Now please, either fix the data type of this column, or store these numbers in a different column. 现在,请修复此列的数据类型,或将这些数字存储在其他列中。

If you pass in A12 and need to find rows where Value1 is A010 and Value2 is A029 then it gets a little more complex: 如果您传递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;

See how ugly that is? 看到那是多么丑陋吗? Can you please, please, please consider fixing this terrible design so you don't have to litter your codebase with spaghetti queries like this? 能否请您讨好,请考虑修复这个糟糕的设计,这样就不必在这样的意大利面条查询中乱扔代码库了吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM