上代码
IF OBJECT_ID('[A]') IS NOT NULL DROP TABLE [A]
CREATE TABLE [A](aid INT,aname VARCHAR(1))
INSERT [A] SELECT 1,'A' UNION SELECT 2,'B' UNION SELECT 3,'C'
GO
CREATE PROCEDURE proc_A_test
@param VARCHAR(20)
AS
SELECT * FROM [A] WHERE @PARAM = 'B'exec proc_A_test 'aname '    --注意,这个aname是上面表的字段
我想问2个问题1.可不可以把存储过程的参数作为执行SQL语句的字段参数2.为什么这个存储过程执行了多次

解决方案 »

  1.   

    可以 要动态执行
    exec('SELECT * FROM [A] WHERE ' + @PARAM + '= ''B''')
      

  2.   

    CREATE PROCEDURE proc_A_test
    @param VARCHAR(20)
    AS
    SELECT * FROM [A] WHERE aname =@PARAM 
      

  3.   

    IF OBJECT_ID('[A]') IS NOT NULL DROP TABLE [A]
    CREATE TABLE [A](aid INT,aname VARCHAR(1))
    INSERT [A] SELECT 1,'A' UNION SELECT 2,'B' UNION SELECT 3,'C'
    GO
    CREATE PROCEDURE proc_A_test
    @param VARCHAR(20)
    AS
    exec('SELECT * FROM [A] WHERE '+@PARAM+' = ''B''')
      

  4.   

    IF OBJECT_ID('[A]') IS NOT NULL DROP TABLE [A]
    CREATE TABLE [A](aid INT,aname VARCHAR(1))
    INSERT [A] SELECT 1,'A' UNION SELECT 2,'B' UNION SELECT 3,'C'
    GO
    CREATE PROCEDURE proc_A_test
    @param VARCHAR(20)
    AS
    exec('SELECT * FROM [A] WHERE ' + @PARAM + '= ''B''')
    go --注意 加了go  要不你的 exec proc_A_test 'aname '是存储过程的一部分  就是自己调用了自己
    exec proc_A_test 'aname '    --注意,这个aname是上面表的字段
      

  5.   

    CREATE PROCEDURE proc_A_test
    @param VARCHAR(20)
    AS
    EXEC('SELECT * FROM [A] WHERE '+@PARAM+' = 'B')
    用动态