我有一个表名为Test如何在将值传入SQL Server 2008中的表后获取一行?
Test
Name Value1(varchar) Value2(varchar)
A 1 9
B 10 19
C 20 39
D 40 45
... ... ...
现在我如何才能从测试表名称,当我发送类似“8”或“21'etc
我有一个表名为Test如何在将值传入SQL Server 2008中的表后获取一行?
Test
Name Value1(varchar) Value2(varchar)
A 1 9
B 10 19
C 20 39
D 40 45
... ... ...
现在我如何才能从测试表名称,当我发送类似“8”或“21'etc
庵值,为什么你列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
通过,并需要找到行,其中Value1
是A010
和Value2
是A029
那么它就会稍微复杂一些:
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;
见该是多么难看?你可以请,请考虑修复这个可怕的设计,所以你不必乱扔你的代码库像这样的意大利面条问题?
“8”或“21”在你的上下文中意味着什么,即预期的结果是什么? – Vikdor 2013-03-14 01:32:20
感谢您的快速回复。传递数字是字符串,所以在我的情况下,如果我通过8,那么我应该得到A,如果我通过21,那么我应该得到C. – Lakhae 2013-03-14 01:36:15