是否可以在SQL中使用变量来存储查询。 例如,在主查询中多次使用子查询时节省时间。
例:
DECLARE @my_query as varchar(250) = select x from my_table where my_table = y.your_table
SELECT
a,b,c,(@my_query),d,e,f
FROM my_table_1
是否可以在SQL中使用变量来存储查询。
取决于您对"查询"的定义。如果您的意思是存储我们用于执行命令的文本,那么答案是肯定的。如果您指的是对象类型查询,那么答案不是 - 因为没有适合此的数据类型。
我的意思是变量可以存储字符串值。该字符串可以是所需的任何查询命令。因此,您可以存储例如文本"从表1中选择col1,col2"。
接下来,您需要询问如何使用此文本以将其作为查询的一部分执行,这是使用动态查询完成的。
我们可以使用内置的存储过程执行查询的文本sp_executesql
,它是为满足此类需求而构建的。
例如:
-- DECLARE VARIABLE
DECLARE @MyQuery NVARCHAR(MAX)
-- SET the value of the variable
SET @MyQuery = 'SELECT ''Yes I can'''
-- Executing a dynamic query
EXECUTE sp_executesql @MyQuery
这是另一个看起来更接近您的问题的示例:
-- First let's create a table
CREATE TABLE T(ID INT)
INSERT T(ID) VALUES (1),(2)
GO
-- And here is what you sked about:
-- DECLARE VARIABLE
DECLARE @MyQuery NVARCHAR(MAX)
-- SET the value of the variable
SET @MyQuery = 'select ID from T where ID = ''1'''
-- Let's combine the text to a full query now
DECLARE @FullQuery NVARCHAR(MAX)
SET @FullQuery = '
SELECT
ID,(' + @MyQuery + ')
FROM T
'
PRINT @FullQuery
-- Executing a dynamic query
EXECUTE sp_executesql @FullQuery
注意!您的特定查询示例将返回错误,这与问题"是否可以在 SQL 中使用变量来存储查询"无关。这是"查询"格式不正确的结果。
重要!强烈建议阅读有关此存储过程的文档,并了解它为我们提供的更多选项。
https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-ver15