如何编写存储过程传递 select 语句作为输入参数?
How to write stored procedure passing select statement as input parameter?
我有一个存储过程可以输出 select 语句,如下所示:
select case when count(*) > 10 then ''A1'' else ''B1'' end as id, name, address from database.dbo.student
现在我想写一个存储过程,把这样一个select
语句作为字符串输入,return以上所有的输出。我不确定在哪里分配输出变量。
ALTER PROCEDURE dbo.selectAttributes
@select_statement Nvarchar(MAX),
@id Nvarchar(255) OUT,
@name nvarchar(255) OUT,
@address nvarchar(255) OUT
AS
BEGIN
DECLARE @query nvarchar(MAX)
SET @query = @select_statement
EXEC sp_executesql @query,
N'@select_statement Nvarchar(MAX),
@idOUT Nvarchar(255) OUTPUT,
@nameOUT nvarchar(255) OUTPUT,
@addressOUT nvarchar(255) OUTPUT',
@select_statement, @id OUTPUT, @name OUTPUT, @address OUTPUT
END
我认为你很接近:
ALTER PROCEDURE dbo.selectAttributes (
@select_statement Nvarchar(MAX),
@id Nvarchar(255) OUTPUT,
@name nvarchar(255) OUTPUT,
@address nvarchar(255) OUTPUT
) AS
BEGIN
EXEC sp_executesql @select_statement,
N'@id Nvarchar(255) OUTPUT, @name nvarchar(255) OUTPUT, @address nvarchar(255) OUTPUT',
@id = @id OUTPUT,
@name = @name OUTPUT,
@address = @address OUTPUT
END;
换句话说:
- 你必须把
OUTPUT
关键字放在任何地方。
- 查询字符串没有作为参数进入。
- 我不重命名参数,但如果你这样做,它们必须在某处声明。
我有一个存储过程可以输出 select 语句,如下所示:
select case when count(*) > 10 then ''A1'' else ''B1'' end as id, name, address from database.dbo.student
现在我想写一个存储过程,把这样一个select
语句作为字符串输入,return以上所有的输出。我不确定在哪里分配输出变量。
ALTER PROCEDURE dbo.selectAttributes
@select_statement Nvarchar(MAX),
@id Nvarchar(255) OUT,
@name nvarchar(255) OUT,
@address nvarchar(255) OUT
AS
BEGIN
DECLARE @query nvarchar(MAX)
SET @query = @select_statement
EXEC sp_executesql @query,
N'@select_statement Nvarchar(MAX),
@idOUT Nvarchar(255) OUTPUT,
@nameOUT nvarchar(255) OUTPUT,
@addressOUT nvarchar(255) OUTPUT',
@select_statement, @id OUTPUT, @name OUTPUT, @address OUTPUT
END
我认为你很接近:
ALTER PROCEDURE dbo.selectAttributes (
@select_statement Nvarchar(MAX),
@id Nvarchar(255) OUTPUT,
@name nvarchar(255) OUTPUT,
@address nvarchar(255) OUTPUT
) AS
BEGIN
EXEC sp_executesql @select_statement,
N'@id Nvarchar(255) OUTPUT, @name nvarchar(255) OUTPUT, @address nvarchar(255) OUTPUT',
@id = @id OUTPUT,
@name = @name OUTPUT,
@address = @address OUTPUT
END;
换句话说:
- 你必须把
OUTPUT
关键字放在任何地方。 - 查询字符串没有作为参数进入。
- 我不重命名参数,但如果你这样做,它们必须在某处声明。