Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-重用具有不同输入的查询-是否要将这些输入移动到语句的开头?_Sql_Sql Server_Tsql - Fatal编程技术网

SQL-重用具有不同输入的查询-是否要将这些输入移动到语句的开头?

SQL-重用具有不同输入的查询-是否要将这些输入移动到语句的开头?,sql,sql-server,tsql,Sql,Sql Server,Tsql,下面是一个过于简单的查询: SELECT name ,year FROM Table1 WHERE name LIKE 'McMurderFace%' AND year < 2007 选择 名称 ,年 从…起 表1 哪里 像“McMurderFace%”这样的名字 年份

下面是一个过于简单的查询:

SELECT
       name
       ,year

FROM
       Table1


WHERE
       name LIKE 'McMurderFace%'
       AND year < 2007
选择
名称
,年
从…起
表1
哪里
像“McMurderFace%”这样的名字
年份<2007年
所以说,下一次,你想搜索一个不同的名字&年份-一个将不得不进入WHERE语句。在这样一个简单的查询中-这很好。但我想知道的是更大/更复杂的查询

有没有一种方法可以在查询的开头设置变量,这样如果想要搜索诸如“%SparkesBunny”和year<2004之类的名称,就可以在查询的开头编辑一些内容

e、 g.,这不是它的工作原理,而是这样的:

Set var inputname = McMurderface
Set var inputyear = 2007

SELECT
       name
       ,year

FROM
       Table1


WHERE
       name LIKE 'var(inputname)%'
       AND year < var(inputyear)
Set var inputname=McMurderface
设置变量inputyear=2007
挑选
名称
,年
从…起
表1
哪里
名称如“var(inputname)%”
年<风险值(输入年)
这样的事情存在吗

编辑-确定操作:

编辑2-但在将其用于LIKE时,您必须进行连接

DECLARE,
       @varname AS varchar(100) =  'McMurderface'
       ,@varyear AS int = 2007

SELECT
       name
       ,year

FROM
       Table1


WHERE
       name LIKE @varname + '%'
       AND year < @varyear
声明,
@varname作为varchar(100)='McMurderface'
,@varyear AS int=2007
挑选
名称
,年
从…起
表1
哪里
名称类似于@varname+“%”
年份<@varyear

使用这样的变量

declare @var as int = 1
select @var

您应该能够从那里获得它。

除了另一个答案,它修复了声明参数的方法。您必须像这样将参数传递给

..
WHERE name LIKE '%' + @inputname + '%'
  AND year LIKE '%' + @inputyear + '%';

大量在线文档-您清楚地知道术语“变量”,因此是否搜索了
sql server变量
?变量中可以包含通配符,例如
declare@StartingWith as VarChar(10)=“Mc%”。强制查询始终在模式的开头添加通配符会阻止查询引擎使用索引查找。(仍然可以进行索引扫描。)将其添加到末尾可防止用户使用
declare@EndingWith as VarChar(10)='%ski'需要时。