我有一个运行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
文档
这是不可能的方式,你试图做到这一点。
实现相同结果的另一种方法是:
-
我假设,要添加到现有过程中的最后一条语句必须具有一些动态条件,但它将始终返回ID列表。
-
因此,编写一个动态SQL来选择所有Id,并将结果放入临时表中。
Declare @sql varchar(2000) @sql = ''Select Id from ....'
.--将要添加到过程中的查询放在此处。
Create table #temp ( Id int)
Insert into #temp Exec(@sql)
- 现在使用这个#temp表作为proc中现有select查询的联接
Select *
From INV_DATA a
Join #temp b On a MY_ID = b.id
Where 1=1