目录

简单查询——无SQL变量

在查询中添加SQL变量

创建存储过程

结论


学习如何在查询中使用SQL变量是朝着使您的查询更加灵活供您和其他人使用的正确方向迈出的一步。

当您可以参数化时,为什么要“硬编码”?

嗨,我是来自essentialSQL的Kris,今天我们将研究如何在查询中使用SQL变量,然后我将最终获取我们组合在一起的查询,然后将其转换为存储过程。所以让我们开始吧!

简单查询——无SQL变量

我们将从Person.Person表中选择LastName类似于Ral的所有人员:

结果如下:

select *
from Person.Person
Where LastName like 'Ral%'



sql server 创建变量数组 sql创建变量查询_sql server 创建变量数组

在查询中添加SQL变量

我接下来要做的是声明一个变量来做同样的事情,但是使用一个变量。我将为LastNamePattern声明一个变量。我们将其设为varchar,长度设为20,然后将其设置为等于'Ral%',这就是我们刚刚为查询运行的内容。

好的,现在很酷的是,我可以使用这个变量,然后我可以将它直接放入我的查询中。正确的?

--Select with variable in Query
declare @LastNamePattern as varchar(40);
set @LastNamePattern = 'Ral%'

select *
from Person.Person
Where LastName like @LastNamePattern



现在要发生的是,当我运行查询时,LastNamePattern将设置为' Ral%'。然后当我们运行查询时,它将在查询本身中使用该值。

所以让我们运行它。你可以得到它以Ral开头的LastNames。

sql server 创建变量数组 sql创建变量查询_sql server 创建变量数组_02

如果我在这里将其更改为例如K并运行它,您会看到它返回以Kal开头的人名。现在我们的查询不需要改变,对吧?我可以更改变量并实现这一点。

sql server 创建变量数组 sql创建变量查询_数据库_03

您可能会问,“嗯,这很酷,我想您可以将它用于脚本。” 你可以喜欢这样,但更好的是,你可以创建一个存储过程,然后将参数传入并做同样的事情,然后将它变成一个存储过程。

创建存储过程

现在让我们基于我们的脚本创建一个存储过程。我将调用我的存储过程PersonSearchLastName,我们将作为参数引入我们的姓氏模式。

因为存储过程接受LastNameParameter我们不再需要将其声明为变量并设置其值。

到目前为止,我们使用标准模式声明存储过程。

现在我将添加我的查询,就在这里。它仍然在查询中使用sql变量,但现在它来自存储过程参数。

它已经引用了@LastNamePattern,所以没有太多需要改变的地方。

这是准备就绪的最终存储过程!

——将其设为存储过程并运行它!

create procedure PersonSearchLastName(@LastNamePattern as varchar(20))
AS
begin
    select *
    from Person.Person
    Where LastName like @LastNamePattern
end

exec dbo.PersonSearchLastName 'Ral%'



让我运行这个命令在数据库中创建存储过程对象。

现在我可以使用以下命令执行它:

EXEC PersonSearchLastName 'Ral%'



这会传入姓氏模式。下图显示了它是如何工作的:

sql server 创建变量数组 sql创建变量查询_sql server 创建变量数组_04

我们甚至可以做一些很酷的事情,比如搜索“%ert%”。让我们看看是否有人在他们的名字中间有类似ert。我们可以运行

EXEC PersonSearchLastName '%ert%'



你会在这里看到洛克特、罗伯茨等人的数据。所以ert在中间。我有一个模式。

希望您现在看到您可以使用这个存储过程,然后只需将许多不同类型的模式传递给它,即可找到名称。

结论

向查询中添加变量并不困难。如果您跟随我们的演进,您会看到我们如何处理一个简单的查询,测试其结果,然后逐步将其“更改”为存储过程中的查询:

sql server 创建变量数组 sql创建变量查询_存储过程_05