有没有办法在不使用 sp_executesql 的情况下执行存储在 nvarchar 或 ntext 中的 SQL 语句并将执行的 SQL 语句的结果参数化?例如
@SQL = 'SELECT name FROM db.dbo.employees WHERE income > 50000'
在这种情况下,在存储过程中,我是否可以在无需修改查询的情况下提取名称,以便可以使用 sp_executesql 和为名称定义的 OUTPUT 参数?
有没有办法在不使用 sp_executesql 的情况下执行存储在 nvarchar 或 ntext 中的 SQL 语句并将执行的 SQL 语句的结果参数化?例如
@SQL = 'SELECT name FROM db.dbo.employees WHERE income > 50000'
在这种情况下,在存储过程中,我是否可以在无需修改查询的情况下提取名称,以便可以使用 sp_executesql 和为名称定义的 OUTPUT 参数?
到底是什么阻止了您使用 SP_EXECUTESQL?这是 Dilbert 的片段吗?
无论如何,如果您在该特定查询中使用输出参数,它很可能会从收入超过 50,000 的所有员工中返回一个(随机)值。下面是一个示例,展示了如何将整个结果返回给动态 SQL 语句的调用者。
这里的关键是INSERT.. EXEC
create table dbo.employees (
name varchar(10),
income int);
insert employees values
('john', 10000),
('joe' , 20000),
('joey', 40000),
('bob' , 70000),
('tim' , 100000);
declare @SQL nvarchar(max) =
'SELECT name FROM dbo.employees WHERE income > 50000';
declare @names table (name varchar(20));
insert @names
EXEC (@SQL);
select * from @names;
这是如何在 SQL Server 中通过参数化 SQL Query 使用完全动态 SQL 的示例。
SET @Sql = N'UPDATE ' + @tablen + ' SET LOSS_SCORE=0.00, EARNED_SCORE=0.00 WHERE SECTIONSUBTYPE_CODE!=''NW'' AND
BATCH_IDENTITY ='''+@BATCH_IDENTIFIER+''' AND PACK_NO IN (SELECT PACK_NO FROM ' + @tablen + ' WHERE
BATCH_IDENTITY =''' +@BATCH_IDENTIFIER+''' AND ECTIONSUBTYPE_CODE=''NW'' AND LOSS_SCORE=100.00)'
EXECUTE sp_executesql @Sql
我在我的项目中使用过,它工作正常。希望它也能帮助你。