我想将存储过程中的选择查询作为argumnet传递

Co.*_*den 5 sql sql-server

我做了这个程序..

ALTER PROCEDURE [dbo].[MyProcedure]
            @pSelect nvarchar
AS
BEGIN
    SET NOCOUNT ON;

    select @pSelect from tabel1
END
Run Code Online (Sandbox Code Playgroud)

我想将一个选择查询从c#代码传递给此存储过程

MyProcedure("column1,column2");
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做,因为存储过程将我的参数视为一个字符串,它的行为就像

select N'column1,column2' from tabel1
Run Code Online (Sandbox Code Playgroud)

请帮助我

或者为此提供更好的选择

The*_*heQ 11

您必须在存储过程中使用动态sql.

ALTER PROCEDURE [dbo].[MyProcedure]
    @pSelect nvarchar(max)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @SQL nvarchar(max)

    SET @SQL = 'select ' + @pSelect + ' from tabel1';

    EXEC (@SQL)
END
Run Code Online (Sandbox Code Playgroud)

这是一个测试上述存储过程的脚本:

CREATE TABLE tabel1 (id int, data varchar(50))
INSERT INTO tabel1 VALUES(1,'aaa'),(2,'bbb'),(3,'ccc')

EXEC [dbo].[MyProcedure] 'id'
EXEC [dbo].[MyProcedure] 'data'
EXEC [dbo].[MyProcedure] 'id,data'
Run Code Online (Sandbox Code Playgroud)