为什么同时使用这个时间创建表类型和存储过程不起作用

时间:2013-08-30 19:18:59

标签: sql-server sql-server-2008 stored-procedures

我正在尝试运行此脚本。我正在使用它来对这些存储过程进行单元测试:

--StudentType   
    CREATE TYPE Student AS TABLE
    (
        Id varchar(19) NOT NULL primary key, 
        Count int NOT NULL
    );
    GO

    --Class
    CREATE PROCEDURE #Class_Data        
        @SList AS Student READONLY, 
        @RNumber VARCHAR(50)    

    AS
    BEGIN       
        INSERT INTO Class(ClassNumber, Count, RollNumber)
                SELECT
                    Id, Count, @RNumber From @SList 
    END


    GO

如果我首先运行Type而不是运行存储过程,则脚本有效。但是,如果我一起运行它们,为什么不运行呢?有人可以告诉你是否有办法运行它?

1 个答案:

答案 0 :(得分:0)

#指定临时存储过程。似乎这是一个旧功能,它不会在SQL2008中更新(表参数是SQL2008中的新功能)以允许表参数。对于SQL2000(!)Books Online说:

SQL Server 2000还支持临时存储过程[...]。临时存储过程存储在tempdb中,有用连接时到SQL Server的早期版本(SQL7,6.5?!)。

我想说临时存储过程是SQL2000中的一个老特性,更不用说SQL2008了。

但是,如果你试图创建一个非临时的。 SP然后CREATE PROCEDURE Class_Data将成功执行。

此外,您应该避免使用@var AS type语法,因为在SQL AS中,关键字用于指定别名(例如SELECT Column1 AS Col1FROM table1 AS t1)或计算列{{ 1}}。