变量内的查询



是否可以在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

相关内容

  • 没有找到相关文章