如何使此SQL查询更加动态和线性?
我有一个名为如何使此SQL查询更加动态和线性?,sql,sql-server,Sql,Sql Server,我有一个名为view\u FORM\u SALE\u SUBMISSION\u INFO的视图 我有疑问 select a.FormSl from VIEW_FORM_SALE_SUBMISSION_INFO as a where FormSl between convert(int,'113990') and convert(int,'1131000') 我的目标: 我想将这两个值作为参数传递到convert()函数中 我希望这个查询更加线性,也就是说,我可以在这个查询之前进行这些转换,这
view\u FORM\u SALE\u SUBMISSION\u INFO的视图
我有疑问
select a.FormSl
from VIEW_FORM_SALE_SUBMISSION_INFO as a
where FormSl between convert(int,'113990') and convert(int,'1131000')
我的目标:
convert()
函数中要对此进行参数化,可以创建一个表值函数
CREATE FUNCTION myFunction (@lower_bound AS VARCHAR(32), @upper_bound AS VARCHAR(32))
RETURNS TABLE AS
RETURN
select a.FormSl
from VIEW_FORM_SALE_SUBMISSION_INFO as a
where FormSl between convert(int,@lower_bound) and convert(int,@upper_bound)
SELECT * FROM dbo.myFunction('11111', '22222')
就优化转换而言,您所拥有的将是最佳的
如果您想进一步改进它,请不要传入字符串,而是首先传入整数。要将其参数化,您可以创建一个表值函数
CREATE FUNCTION myFunction (@lower_bound AS VARCHAR(32), @upper_bound AS VARCHAR(32))
RETURNS TABLE AS
RETURN
select a.FormSl
from VIEW_FORM_SALE_SUBMISSION_INFO as a
where FormSl between convert(int,@lower_bound) and convert(int,@upper_bound)
SELECT * FROM dbo.myFunction('11111', '22222')
就优化转换而言,您所拥有的将是最佳的
如果您想进一步改进它,请不要传入字符串,而是首先传入整数。这怎么样
select a.FormSl
from VIEW_FORM_SALE_SUBMISSION_INFO as a
where FormSl between @param1 and @param2
其中@param1
和@param2
是整数参数?这个怎么样
select a.FormSl
from VIEW_FORM_SALE_SUBMISSION_INFO as a
where FormSl between @param1 and @param2
其中
@param1
和@param2
是整数参数?为什么需要转换
?如果FormS1是int,请使用,其中FormSl介于113990和1131000之间
@Mikael Eriksson:我需要转换,因为between不用于比较,因为我的两个字符串长度可变抱歉,我不明白。如果FormSl是int
,那么参数应该是int
。如果FormSl不是int
但存储整数,则应将FormSl的数据类型更改为int
。如果FormSl中有非整数值,您的查询将出现转换错误,因为FormSl已隐式转换为整数。很抱歉,Mikael,我正在处理某人的hoalf daone工作,其中FormSl是由一个war数据的前3个字符生成的,我在其中添加了一个自动递增的数字。首先,在我的应用程序中,我将所有formsl都设置为7个字符,用零左键填充,但为了保持他的工作不变,我必须同时使用6个字符,例如113999和1131000,因为这两个字符都是字符串,因此在使用between运算符时,我必须使用零或转换为整数的Lpad为什么需要转换
?如果FormS1是int,请使用,其中FormSl介于113990和1131000之间
@Mikael Eriksson:我需要转换,因为between不用于比较,因为我的两个字符串长度可变抱歉,我不明白。如果FormSl是int
,那么参数应该是int
。如果FormSl不是int
但存储整数,则应将FormSl的数据类型更改为int
。如果FormSl中有非整数值,您的查询将出现转换错误,因为FormSl已隐式转换为整数。很抱歉,Mikael,我正在处理某人的hoalf daone工作,其中FormSl是由一个war数据的前3个字符生成的,我在其中添加了一个自动递增的数字。首先,在我的应用程序中,我将所有formsl都设置为7个字符,用零填充,但为了保持他的工作不变,我必须同时使用6个字符,例如113999和1131000,因为这两个字符都是字符串。因此,在使用BEVER运算符时,我必须使用零Lpad或转换为整数