原因:你的临时表是建在库TEMPDB的,而你的自定义数据类型没有定义在TEMPDB。建议在存储过程临时表里用基础类型varchar(20)。

解决方案 »

  1.   

    也可以在存储过程里判断TEMPDB的XName是否创建,如果没有创建则在存储过程里创建,好象太麻烦了,不如用基础类型varchar(20)。
      

  2.   

    你在TEMPDB创建XName,然后试试你的存储过程,应该可以的,我刚试过。
      

  3.   

    to Yang_(扬帆破浪) 
    Thanks
    为了统一某些关键且常用的字段,例如对象ID。才使用了自定义的数据类型。如果在创建临时表的时候不使用自定义数据类型就违背了统一的意图。
    在TempDB中创建一套自定义数据类型?
      

  4.   

    不知道你用的是不是6.5,6.5的TEMPDB在关服务后会丢失自定义数据类型。
    2000没有试过加自定义数据类型,你自己试试会不会丢失!
      

  5.   

    faint,居然也会丢失,不过似乎如果哪个表中又相关数据就不会丢了。try again
      

  6.   

    创建一个在 Microsoft SQL Server 启动时自动运行的存储过程,在此存储过程中创建自定义的数据类型。
      

  7.   

    十分紧急
    这个存储过程怎么创建????
    Thanks a lot.
    我企图将应用自定义类型的临时表加锁,但是失败了。
      

  8.   

    我明白了,方法如下:
      在MODEL 表中建类型!
    关SQLSERVER 重开SQLSERVER 可以!!!!
      

  9.   

    兄弟,除了Tempdb,别的都可以。可是临时表就建立在TempDb库中。
     foolishchao(亚超),怎么创建sql server启动时自动运行的存储过程?
      

  10.   

    找到了,赫赫,只有master库中的存储过程有这个功能。
    学了一招
      

  11.   

    自动执行存储过程
    SQL Server 启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统管理员创建,并在 sysadmin 固定服务器角色下作为后台过程执行。这些过程不能有任何输入参数。 对启动过程的数目没有限制,但是要注意,每个启动过程在执行时都会占用一个连接。如果必须在启动时执行多个过程,但不需要并行执行,则可以指定一个过程作为启动过程,让该过程调用其它过程。这样就只占用一个连接。在启动时恢复了最后一个数据库后,即开始执行存储过程。若要跳过这些存储过程的执行,请将启动参数指定为跟踪标记 4022。如果以最低配置启动 SQL Server(使用 -f 标记),则启动存储过程也不会执行。有关更多信息,请参见跟踪标记。 若要创建启动存储过程,必须作为 sysadmin 固定服务器角色的成员登录,并在 master 数据库中创建存储过程。使用 sp_procoption 可以: 将现有存储过程指定为启动过程。停止在 SQL Server 启动时执行过程。查看 SQL Server 启动时执行的所有过程的列表。 
      

  12.   

    好像来晚了,有斑竹在,问题应该可以很快搞定。
    Yang_(扬帆破浪) ,你真行,我一个月不在,你不但有了星级,而且弄了这么多的信誉分,是不是自己给自己放水啊!!
    :)
      

  13.   

    呵呵,放水在所难免!!特别是FAQ刚出来的时候。
      

  14.   

    还有一个问题,就是在存储过程中不允许用use tempdb这样的语句。
    但是如果不用use tempdb,那这些数据类型就建立到master库中了!!!
    怎么办?
      

  15.   

    在存储过程中,不允许使用use database.
    那怎么从master库中的存储过程来增加tempdb库的自定义数据类型?
      

  16.   

    试一下用动态SQL
    EXEC (' 
         USE TEMPDB
         ....
         ')
      

  17.   

    那exec sp_addtype....这些语句怎么写?
    难道是exec ('use tempdb
                 exec ('sp_addtype .....') 
    ')
    exec中嵌套的单引号记得是'''',4个?
      

  18.   

    --在MS SQL Server 2000 中测试通过if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_autorun]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[usp_autorun]
    GOSET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS OFF 
    GOCREATE PROCEDURE dbo.usp_autorun  AS
    exec('use tempdb EXEC sp_addtype N''dates'', N''char (10)'', N''not null''')
    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GOexec sp_procoption N'usp_autorun', N'startup', N'true'
    GO