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.告诉编译器,这是一个对象(视图、存储过程,表等)。

  • 相关阅读:
    C++初始化列表
    正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话
    C++ 的关键字(保留字)完整介绍
    Qt之UI文件设计和运行机制
    QT 5.12安装
    Win2016 安装VM与Hyper-V冲突解决办法
    多线程与并行
    Framework使用
    MVVMLight
    Knockout 应用
  • 原文地址:https://www.cnblogs.com/d1eec7bf/p/5584281.html
Copyright © 2011-2022 走看看