sql - 在 SQL Server 的 IN 子句中调用存储过程?

标签 sql stored-procedures

是否可以在 IN 子句中调用存储过程?

Select field0, field2 FROM Table
WHERE field0 in (exec storedproc)

之所以使用存储过程是因为它的复杂性

最佳答案

您可能必须使用 OpenRowset实现这一目标。

Select Field0, Field2 From Table
Where Field0 in (
                SELECT Field0 FROM OPENROWSET('SQLNCLI', 
                             'Server=SERVERNAME;Trusted_Connection=yes;',
                            'EXEC StoredProc')
                )

为此,必须在服务器上启用以下选项:

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

如果无法更改这些设置,那么另一个选项(正如在评论中与 Martin 讨论的那样)是填充一个临时表。

例如

declare @t table
(
Field0 int,
Field1 varchar(100)
...
)

Insert Into @t
Exec storedProcedure

Select Field0, Field2 From Table
Where Field0 in (
                SELECT Field0 FROM @t
                )

要将存储过程的结果插入临时表,临时表的定义必须与存储过程的结果完全匹配。

关于sql - 在 SQL Server 的 IN 子句中调用存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955463/

相关文章:

MySQL 查询顺序

java - 从 QueryDSL 中的选择中选择

sql - 带有表名 bindvar 的 Postgres sqlx 准备语句

linux - 如何从结果集中创建文件?

sql-server - 将SSRS中的多个值参数传递给存储过程

c# - 什么更快?选择 [object] 或使用 linq 选择 new {[object].value1, [object].value2}

mysql - mysql 中的 In 子句

php - MySQL IN 子句 - 字符串和 INT 比较

c# - 在 .NET 7 和 WinForms 应用程序中使用 SqlDependency

asp.net-mvc - 使用 Entity Framework 4.1 执行更新/插入存储过程?