MsSql 中 表Test 字段 Ts是Xml类型 Xml结构如下
<Ts IsDel=”True” IsEdit=”False” IsAdd=”False”…./>
CREATE FUNCTION IsCan 
(
@Name Nvarchar(50))
RETURNS bit
创建函数IsCan依据参数 @Name(对应Ts的属性)返回属性值

解决方案 »

  1.   

    xml列里只存了一行?否则返回第几行的@Name?
      

  2.   


    DECLARE @doc xml;
    SET @doc='<Ts IsDel="True" IsEdit="False" IsAdd="False" />'DECLARE @name NVARCHAR(50)
    SET @name='IsEdit'SELECT @doc.value('(/Ts/@*[local-name()=sql:variable("@name")])[1]','varchar(50)')
      

  3.   

    CREATE TABLE tb(id int,ts xml)
    INSERT tb VALUES(1,'<Ts IsDel="True" IsEdit="False" IsAdd="False" />' )
    INSERT tb VALUES(2,'<Ts IsDel="False" IsEdit="False" IsAdd="False" />' )
    INSERT tb VALUES(3,'<Ts IsDel="True" IsEdit="True" IsAdd="True" />' )
    INSERT tb VALUES(4,'<Ts IsDel="True" IsEdit="False" IsAdd="False" />' )
    GOCREATE FUNCTION dbo.IsCan(@id INT,@Name NVARCHAR(50))
        RETURNS bit
    AS
    BEGIN
        DECLARE @re NVARCHAR(20)
        
        SELECT
            @re=ts.value('(/Ts/@*[local-name()=sql:variable("@name")])[1]','NVARCHAR(20)')
        FROM tb
        WHERE id=@id
        
        RETURN CASE WHEN @re='True' THEN 1 ELSE 0 END
    ENDGOSELECT 
        id,
        ts,
        dbo.IsCan(id,'IsDel') AS IsDel,
        dbo.IsCan(id,'IsEdit') AS IsEdit,
        dbo.IsCan(id,'IsAdd') AS IsAdd
    FROM tbGO 
    DROP TABLE tb/*
    id          ts                                               IsDel IsEdit IsAdd
    ----------- ------------------------------------------------ ----- ------ -----
    1           <Ts IsDel="True" IsEdit="False" IsAdd="False" />     1     0      0
    2           <Ts IsDel="False" IsEdit="False" IsAdd="False" />    0     0      0
    3           <Ts IsDel="True" IsEdit="True" IsAdd="True" />       1     1      1
    4           <Ts IsDel="True" IsEdit="False" IsAdd="False" />     1     0      0(4 行受影响)
    */
      

  4.   

    这个输字的小框框是用FCK控件做的啊,
    这个网站是ASP.NET的吗?
      

  5.   

    注册的页面有BUG请维护人员做处理