将查询字符串作为硬编码语句的一部分执行



我有一个运行select语句的非常长的存储过程。我想在末尾添加的语句将在查询字符串中工作。是否可以将查询字符串作为SQL Server中硬编码语句的一部分执行?

SELECT * 
FROM INV_DATA 
WHERE 1 = 1 
AND MY_ID = 
SET @SQL = @SQL + ' SELECT id FROM people WHERE id = 
CASE WHEN NOT EXISTS (SELECT ... WHERE storeID = (CASE WHEN ...@ACT_METHOD = ...)) AND ...'

SQL Server有一个内置的存储过程,它可以对字符串变量sp_executesql运行查询。

这里有一个例子:

DECLARE @IntVariable INT;  
DECLARE @SQLString NVARCHAR(500);  
DECLARE @ParmDefinition NVARCHAR(500);  

/* Build the SQL string one time.*/  
SET @SQLString =  
N'SELECT BusinessEntityID, NationalIDNumber, JobTitle, LoginID  
FROM AdventureWorks2012.HumanResources.Employee   
WHERE BusinessEntityID = @BusinessEntityID';  
SET @ParmDefinition = N'@BusinessEntityID tinyint';  
/* Execute the string with the first parameter value. */  
SET @IntVariable = 197;  
EXECUTE sp_executesql @SQLString, @ParmDefinition,  
@BusinessEntityID = @IntVariable;  
/* Execute the same string with the second parameter value. */  
SET @IntVariable = 109;  
EXECUTE sp_executesql @SQLString, @ParmDefinition,  
@BusinessEntityID = @IntVariable;  

SQL Serversp_executesql文档

这是不可能的方式,你试图做到这一点。

实现相同结果的另一种方法是:

  1. 我假设,要添加到现有过程中的最后一条语句必须具有一些动态条件,但它将始终返回ID列表。

  2. 因此,编写一个动态SQL来选择所有Id,并将结果放入临时表中。

Declare @sql varchar(2000) @sql = ''Select Id from ....'.--将要添加到过程中的查询放在此处。

Create table #temp ( Id int)
Insert into #temp Exec(@sql)
  1. 现在使用这个#temp表作为proc中现有select查询的联接
Select *
From INV_DATA a
Join #temp b On a MY_ID = b.id
Where 1=1