zoukankan      html  css  js  c++  java
  • SqlServer 傲娇的表变量

    我们在编写自定义函数时,难免会用到表变量,但是,表变量关联时,会发生无法识别的错误。如:

    --表1
    DECLARE @tbl1 TABLE
    (
    id int,
    ftext NVARCHAR(max),
    fvalue NVARCHAR(max)
    )
    INSERT @tbl1 (id,ftext,fvalue) VALUES ('1','text1','value1')
    INSERT @tbl1 (id,ftext,fvalue) VALUES ('2','text2','value2')
    INSERT @tbl1 (id,ftext,fvalue) VALUES ('3','text3','value3')
    --表2
    DECLARE @tbl2 TABLE
    (
    id int,
    ftext NVARCHAR(max),
    fvalue NVARCHAR(max)
    )
    INSERT @tbl2 (id,ftext,fvalue) VALUES ('1','text1','value1')
    INSERT @tbl2 (id,ftext,fvalue) VALUES ('2','text2','value2')
    INSERT @tbl2 (id,ftext,fvalue) VALUES ('3','text3','value3')

    SELECT * FROM @tbl1 INNER JOIN @tbl2 ON @tbl1.id = @tbl2.id

    执行上面的sql 后,我们会得到如下的消息:

    消息 137,级别 16,状态 1,第 22 行
    必须声明标量变量 "@tbl1"。
    消息 137,级别 16,状态 1,第 22 行
    必须声明标量变量 "@tbl2"。

    遇到这种情况时,如何处理?做如下修改,便可以飞起来:

    SELECT * FROM @tbl1 INNER JOIN @tbl2 ON [@tbl1].id = [@tbl2].id

    这里,涉及到[]的用法:

    方括号的作用:

    1.告诉编译器,使用的字段不是预留字段。

     → 

    2.告诉编译器,这是一个对象(视图、存储过程,表等)。

  • 相关阅读:
    rgbdslam 源代码的实现
    键值对排序并MD5加密
    字符编码
    排序算法
    Bridge Pattern (桥接模式)
    Visitor Pattern 和 doubledispatch
    栈、队列、链表
    如何使用visio
    架构师论文
    英语写作句子
  • 原文地址:https://www.cnblogs.com/d1eec7bf/p/5584281.html
Copyright © 2011-2022 走看看