3

有没有办法在不使用 sp_executesql 的情况下执行存储在 nvarchar 或 ntext 中的 SQL 语句并将执行的 SQL 语句的结果参数化?例如

@SQL = 'SELECT name FROM db.dbo.employees WHERE income > 50000'

在这种情况下,在存储过程中,我是否可以在无需修改查询的情况下提取名称,以便可以使用 sp_executesql 和为名称定义的 OUTPUT 参数?

4

2 回答 2

4

到底是什么阻止了您使用 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;
于 2012-10-13T05:23:26.357 回答
0

这是如何在 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

我在我的项目中使用过,它工作正常。希望它也能帮助你。

于 2016-11-29T12:39:11.667 回答