Tsql 使用临时表存储全局变量是否效率低下?

Tsql 使用临时表存储全局变量是否效率低下?,tsql,Tsql,我知道T-SQL中现在没有全局变量 我知道我刚刚学到的另一种选择是,您可以将它们存储在临时表中,并根据需要进行更新,然后使用临时表的值 但对于大量数据而言,这是否效率低下?我的意思是考虑这个: create table #vars (var1 int, var2 bigint, var3 int) GO insert #vars(0,0,0) -- default to 0 GO Update #vars set var1 = 1 upda

我知道T-SQL中现在没有全局变量

我知道我刚刚学到的另一种选择是,您可以将它们存储在临时表中,并根据需要进行更新,然后使用临时表的值

但对于大量数据而言,这是否效率低下?我的意思是考虑这个:

    create table #vars (var1 int, var2 bigint, var3 int)

    GO

    insert #vars(0,0,0) -- default to 0

    GO

    Update #vars set var1 = 1
    update #vars set var2 = 4
    update #vars set var3 = 6

    Then use var1, var2, and var 3 in a SQL statement here

    GO

    repeat this process...update and use

GO

...REPEAT
所以我的意思是每次我向SQL Server发送多个更新调用只是为了设置这些?就可能的执行计划而言,我觉得效率太低了?我想我可以跑过去看看,但只是好奇这是否通常是一种糟糕的做法

我试图摆脱的是,我必须像大多数人一样,在我希望批处理的每个GO的SQL语句中都复制这些变量,至少批处理得很好

Update #vars set var1 = 1
update #vars set var2 = 4
update #vars set var3 = 6
可以改为

Update #vars set var1=1,var2=4,var3=6

执行的背景是什么?这是从外部应用程序启动的吗?是否可以将所有这些都打包到存储过程中?我正在执行一个大数据加载。因此,每个批处理sql语句将根据我设置的变量值创建大约10000条记录,我试图将其包装到sp中。因此,我在sp中获取并声明变量,并将GO T-sql语句移动到主体中。但是,当我试图通过在每个Go部分中设置这些声明变量来使用这些变量时,它无法识别变量。因此我不知道为什么我存储的过程中声明的变量在每个Go中都不是全局变量……我认为它们应该是全局变量,但可能不是全局变量。你真的需要首先使用“Go”吗?也许交易更适合它?此外,对于批量加载,这些数据是否来自可以使用bcp实用程序插入的平面文件?或者代码中的BulkInsert方法?我不认为update语句可以这样构造,这就是insert语法。但您可以这样做:更新vars SET var1=1、var2=4、var3=6