相关疑难解决方法(0)

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万
查看次数

如何在动态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万
查看次数

在Sql Server 2008中截断/清除表变量

是否可以在sql server 2008中截断或清除表变量?

Declare @tableVariable table
(
   id int, 
   value varchar(20)
)


while @start<=@stop

  begin

    insert into @tableVariable(id,value) 
    select id
         , value 
      from xTable 
     where id=@start

   --Use @tableVariable 

   --@tableVariable should be flushed out of 
   -- old values before inserting new  values

    set @start = @start + 1 
  end 
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

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

SQL Server最终尝试捕获

我有一个场景,我需要类似的东西 .NET's try-catch-finally block.

在我的尝试,我会CREATE a #temp table,INSERT数据,将其与过程中的其他数据集的基础上#temp.

CATCH随后RAISERROR.有可能有FINALLYDROP #temp吗?下面是伪代码:

BEGIN TRY

  CREATE TABLE #temp
  (
     --columns
  )
  --Process data with other data sets

END TRY
BEGIN CATCH

  EXECUTE usp_getErrorMessage

END CATCH
BEGIN FINALLY

  DROP TABLE #temp

END FINALLY
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

SQL Server:临时表是存储在RAM还是磁盘上?

我将超过1000万行插入临时表中,其大小约为5GB.我的电脑有32GB的RAM.SQL Server是将此表放在RAM中还是放在磁盘上?

sql-server

7
推荐指数
0
解决办法
2485
查看次数

使用Table变量比临时表更快

我可以安全地假设我使用tempdb写入临时表的存储过程,我最好将它们切换到表变量以获得更好的性能吗?

temp-tables table-variable sql-server-2008-r2

5
推荐指数
1
解决办法
5016
查看次数

bcp不会输出临时表

我有一个存储过程存储临时表中的值.

这一切都运作良好,但我不能用它

exec master..xp_cmdshell 'bcp "exec sp_test '2006-07-21' " queryout c:\test.txt -c '
Run Code Online (Sandbox Code Playgroud)

如果我将表更改为常规表,那么一切正常.你不能用这种方式使用临时表吗?

我不一定要分享代码,因为它包含公司的东西,但它基本上是这样的

SELECT 
* 
INTO #Extractr
FROM 
TABLE A
WHERE ID in (4,9,14)
Run Code Online (Sandbox Code Playgroud)

错误消息是 invalid object #Extractr

谢谢!

sql bcp

5
推荐指数
1
解决办法
9649
查看次数

表变量在SQL Server中可以具有的最大记录数

是否有限制来限制表变量中的记录数量?如果是,表变量可以保存的最大数量是多少?我必须编写一个存储过程来处理大约1000条记录.我需要使用表变量或临时表吗?

sql t-sql sql-server

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

DECLARE TABLE和CREATE TABLE有什么区别?

我需要将给定的T-SQL语句翻译成另一种语言.这些T-SQL语句正在使用DECLARE TABLE.DECLARE TABLE和之间有什么区别CREATE TABLE

例如,以下两行之间有什么区别?

declare @t table (account_id varchar(512), num_events int);
Run Code Online (Sandbox Code Playgroud)
Create table t {account_id varchar(512), num_events int}
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

2
推荐指数
1
解决办法
9033
查看次数

临时表已存在

嗨,我有一个临时表,我试图在其中插入基于 where 条件的记录,但它抛出一个错误,表明它已经存在。我曾尝试更改名称,但这不是问题,因为会话结束时会删除临时表。

我想我写的查询是正确的。

   SELECT [Name]
        INTO #TEMP_REJECT
        FROM #TEMP_VALIDATION
        WHERE Name = @Name
Run Code Online (Sandbox Code Playgroud)

我正在尝试插入 #TEMP_REJECT FROM #TEMP_VALIDATION

错误信息

“数据库中已经有一个名为‘#TEMP_REJECT’的对象。”

请建议。

感谢您的帮助。电阻

sql sql-server

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

多次使用相同的选择与创建临时表

我有类似的代码

select count(*) from(
select t1.col1, t1.col2, t1,col3, t2.col2 from table1 t1
left join table2 t2 on t1.col1=t2.col1) x

select * from(
select t1.col1, t1.col2, t1,col3, t2.col2 from table1 t1
left join table2 t2 on t1.col1=t2.col1) x
where x.col1 > 10
Run Code Online (Sandbox Code Playgroud)

我选择并加入具有相同列的相同表两次。如果我这样做:

declare @table table(col1 int,col2 int,col3 varchar,col4 int)
insert into @table(col1,col2,col3,col4) select * from (
select t1.col1, t1.col2, t1,col3, t2.col2 from table1 t1
left join table2 t2 on t1.col1=t2.col1
) x
select count(*) from @table
select * from @table …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

1
推荐指数
1
解决办法
1718
查看次数

SQL Server:在使用 select * 更改某些值时重复表中的行

我需要将几乎重复的行插入表中,同时更改一些值。

例如,插入具有新 id 的重复行(我不需要自动 id)和不同的名称,但所有其他值相同。问题是我需要做出选择 *

我知道有一种方法可以通过这种方式插入选择和更改值:

insert into Table1(id,name,surname) select newid(),'David',surname from Table1 where id=1
Run Code Online (Sandbox Code Playgroud)

但我不想登记所有字段,而是想使用 select *,所以如果添加了字段,我将不必更改我的存储过程。

我想要类似的东西:

insert into Table1 (
   update (SELECT *
          FROM Table1
          WHERE  id= 1  ) t 
    set t.id= newid(),name='David')
Run Code Online (Sandbox Code Playgroud)

有办法做到吗?

sql t-sql insert insert-update sql-server-2014

1
推荐指数
1
解决办法
6191
查看次数