标签: table-variable

SQL Server中临时表和表变量之间有什么区别?

在SQL Server 2005中,我们可以通过以下两种方式之一创建临时表:

declare @tmp table (Col1 int, Col2 int);
Run Code Online (Sandbox Code Playgroud)

要么

create table #tmp (Col1 int, Col2 int);
Run Code Online (Sandbox Code Playgroud)

这两者有什么不同?关于@tmp是否仍然使用tempdb,或者是否所有内容都发生在内存中,我已经阅读了相互矛盾的意见.

在哪种情况下,一个人胜过另一个?

sql-server temp-tables table-variable

375
推荐指数
10
解决办法
34万
查看次数

SELECT INTO T-SQL中的表变量

有一个复杂的SELECT查询,我想从中将所有行插入表变量,但是T-SQL不允许它.

同样,您不能将表变量与SELECT INTO或INSERT EXEC查询一起使用. http://odetocode.com/Articles/365.aspx

简短的例子:

declare @userData TABLE(
                        name varchar(30) NOT NULL,
                        oldlocation varchar(30) NOT NULL
                       )

SELECT name, location
INTO @userData
FROM myTable
    INNER JOIN otherTable ON ...
WHERE age > 30
Run Code Online (Sandbox Code Playgroud)

表变量中的数据稍后将用于将其插入/更新回不同的表(大多数是具有次要更新的相同数据的副本).这样做的目的是简单地使脚本比SELECT INTO直接进入正确的表更易读,更容易定制.性能不是问题,因为rowcount它相当小,只在需要时手动运行.
......或者告诉我,如果我做错了.

t-sql sql-server insert table-variable

355
推荐指数
6
解决办法
73万
查看次数

什么时候应该在sql server中使用表变量vs临时表?

我正在学习表变量的更多细节.它表示临时表总是在磁盘上,表变量在内存中,也就是说,表变量的性能优于临时表,因为表变量比临时表使用更少的IO操作.

但有时,如果表变量中的记录太多而无法包含在内存中,则表变量将像临时表一样放在磁盘上.

但我不知道"太多记录"是什么.100,000条记录?或1000,000条记录?我怎么知道我正在使用的表变量是在内存中还是在磁盘上?SQL Server 2005中是否有任何函数或工具来测量表变量的大小或让我知道何时将表变量从内存放入磁盘?

sql-server temp-tables table-variable

283
推荐指数
4
解决办法
21万
查看次数

如何在T-SQL中的调试时查看表变量的值?

我们可以在调试时间内在SQL Server Management Studio(SSMS)中看到表值变量中的值(行和单元格)吗?如果有,怎么样?

在此输入图像描述

sql debugging ssms table-variable

180
推荐指数
5
解决办法
10万
查看次数

在表变量上创建索引

你能index在一个表变量上创建SQL Server 2000吗?

DECLARE @TEMPTABLE TABLE (
        [ID] [int] NOT NULL PRIMARY KEY
        ,[Name] [nvarchar] (255) COLLATE DATABASE_DEFAULT NULL 
)
Run Code Online (Sandbox Code Playgroud)

我可以在Name上创建索引吗?

sql t-sql sql-server indexing table-variable

178
推荐指数
2
解决办法
29万
查看次数

如何在SQL-Server中删除表变量?我应该这样做吗?

我在脚本中有一个表变量(不是存储过程).两个问题:

  1. 如何删除表变量?删除表@varName给出"不正确的snytax"错误.
  2. 我应该经常这样做吗?我听说这是一个很好的做法.像这样的小脚本真的有必要吗?

这是我的代码:

Declare @projectList table(
    name varchar(40) NOT NULL);

Insert Into @projectList
Values ('BCR-00021')

Select *
From @projectList

Drop Table @projectList -- does not work
Run Code Online (Sandbox Code Playgroud)

sql sql-server table-variable

115
推荐指数
4
解决办法
11万
查看次数

我可以在T-SQL中循环表变量吗?

反正是否在T-SQL中循环表变量?

DECLARE @table1 TABLE ( col1 int )  
INSERT into @table1 SELECT col1 FROM table2
Run Code Online (Sandbox Code Playgroud)

我也使用游标,但游标似乎不如表变量灵活.

DECLARE cursor1 CURSOR  
    FOR SELECT col1 FROM table2  
OPEN cursor1  
FETCH NEXT FROM cursor1
Run Code Online (Sandbox Code Playgroud)

我希望能够以与游标相同的方式使用表变量.这样我就可以在过程的一个部分中对表变量执行一些查询,然后为表变量中的每一行执行一些代码.

任何帮助是极大的赞赏.

sql t-sql sql-server cursor table-variable

66
推荐指数
5
解决办法
13万
查看次数

如何在动态sql语句中使用表变量?

在我的存储过程中,我在我的过程之上声明了两个表变量.现在我试图在动态sql语句中使用该表变量,但是在执行该过程时出现此错误.我正在使用Sql Server 2008.

这是我的查询的样子,

set @col_name =  'Assoc_Item_' 
              + Convert(nvarchar(2), @curr_row1);

set @sqlstat = 'update @RelPro set ' 
             + @col_name 
             + ' = (Select relsku From @TSku Where tid = ' 
             + Convert(nvarchar(2), @curr_row1) + ') Where RowID = ' 
             + Convert(nvarchar(2), @curr_row);

Exec(@sqlstat);
Run Code Online (Sandbox Code Playgroud)

我得到以下错误,

必须声明表变量"@RelPro".必须声明表变量"@TSku".

我试图在动态查询的字符串块之外取表,但无济于事.

sql sql-server dynamic-sql table-variable sql-server-2008

61
推荐指数
4
解决办法
16万
查看次数

39
推荐指数
3
解决办法
9万
查看次数

如何在T-SQL表变量中重新设置标识列?

我有一个T-SQL 表变量(不是表),它有一个自动递增的标识列.我想清除此变量中的所有数据并将标识列值重置为1.如何才能完成此操作?

t-sql sql-server table-variable

33
推荐指数
2
解决办法
6万
查看次数