标签: table-variable

在SQL Server 2008 R2中创建表变量

什么是表变量?以及如何使用与现有存储过程结果集匹配的列创建表变量(虚拟内存表).

我执行了这个程序,在执行之后,我知道列名.但是,我是否必须声明与存储过程中相同的列数据类型?

编辑:我试过这个

DECLARE @Table TABLE( 
name varchar(30) NOT NULL, 
location varchar(30) NOT NULL 
); 

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param
Run Code Online (Sandbox Code Playgroud)

table-variable sql-server-2008

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

如何在引用表变量时修复"必须声明标量变量"错误?

我无法弄清楚为什么(或者你可能不能这样做)我得到了超出范围的错误

必须声明标量变量"@CompanyGroupSites_Master.

那么我无法在我的Cursor中以这种方式访问​​我的Table变量,或者我一定错过了一些简单的东西,当从光标体内引用时保持该表变量超出范围?

DECLARE @TotalCompaniesToProcess int 
SET @TotalCompaniesToProcess = (select distinct Count(BusinessLine) from vwBuisinessUnit)

IF(@TotalCompaniesToProcess > 0)
BEGIN

    ---------------- ############# SETUP ############# ----------------

    DECLARE @Companies TABLE (Company varchar(30))        
    Insert Into @Companies select distinct Company from Companies

    DECLARE @CompanyGroups_Added TABLE(
                                        CompanyGroupDesc varchar(50),
                                        size varchar(50)
                                      )

    DECLARE @CompanyGroupSites_Added TABLE (
                                              CompanyGroupID int,
                                              CompanyID varchar(12)                                    
                                           )

    DECLARE @CompanyGroupSites_Master TABLE (
                                              CompanyGroupID int,
                                              CompanyID varchar(12)
                                           )
    Insert into @CompanyGroupSites_Master select CompanyGroupID, CompanyID from Sec.CompanyGroupSites                        

    DECLARE @CompanyGroupID int                         
    DECLARE @Company int

    ----------------  END SETUP ---------------- …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server table-variable

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

PostgreSQL表变量

在T-SQL中有什么类似表变量的吗?
在Sql Server中,它看起来像这样:

DECLARE @ProductTotals TABLE
(
  ProductID int,
  Revenue money
)
Run Code Online (Sandbox Code Playgroud)

然后在程序中我可以:

INSERT INTO @ProductTotals (ProductID, Revenue)
  SELECT ProductID, SUM(UnitPrice * Quantity)
  FROM [Order Details]
  GROUP BY ProductID
Run Code Online (Sandbox Code Playgroud)

并像普通表一样操纵这个变量.

这是描述:http://odetocode.com/Articles/365.aspx

sql postgresql plpgsql table-variable

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

如何在MS SQL Management Studio 2012中的调试会话期间查看表变量中的数据?

我想使用SSMS 2012调试复杂的T-SQL脚本.

我可以在调试模式下运行脚本并放置断点,以及逐步执行我的脚本,但是我看不到存储在表变量中的值.

Locals窗口中我看到所有这些变量,但它们的值显示为(table):

当地人的窗口

无法通过上下文菜单或单击变量来查看变量的内容.

我试图使用Immediate Window对表变量运行查询,但这似乎也不起作用.

即时窗口

知道如何从调试会话中的表变量中获取值吗?

debugging ssms table-variable sql-server-2012

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

TSQL表变量初始化

我有以下TSQL表变量:

declare @NumDaysMonth table
(
   month_id smallint,
   num_days smallint
)
Run Code Online (Sandbox Code Playgroud)

我只想快速查看每个月的天数.如何像C数组一样初始化此表:

int numDaysMonth[] = {31, 28, 30, ... , 31};
Run Code Online (Sandbox Code Playgroud)

sql t-sql lookup-tables table-variable

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

如何在plpgsql中使用记录类型变量?

如何将存储在记录类型变量中的查询结果用于同一存储函数中的另一个查询?我使用Postgres 9.4.4.

用这样的表:

create table test (id int, tags text[]);
insert into test values (1,'{a,b,c}'),
                        (2,'{c,d,e}');
Run Code Online (Sandbox Code Playgroud)

我写了一个函数(简化),如下所示:

CREATE OR REPLACE FUNCTION func(_tbl regclass)
RETURNS TABLE (t TEXT[], e TEXT[])
LANGUAGE plpgsql AS $$
DECLARE
  t RECORD;
  c INT;
BEGIN
  EXECUTE format('SELECT id, tags FROM %s', _tbl) INTO t;
  SELECT count(*) FROM t INTO c;
  RAISE NOTICE '% results', c;
  SELECT * FROM t;
END
$$;
Run Code Online (Sandbox Code Playgroud)

......但没有奏效:

select func('test');
Run Code Online (Sandbox Code Playgroud)
ERROR:  42P01: relation "t" does not exist
LINE 1: SELECT count(*) FROM …
Run Code Online (Sandbox Code Playgroud)

postgresql variables function plpgsql table-variable

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

DELETE查询非常慢

我有SQL性能问题.出于突发原因,以下查询非常缓慢:

我有两个列表,其中包含某个表的Id.如果Id已存在于第二个列表中,我需要删除第一个列表中的所有记录:

DECLARE @IdList1 TABLE(Id INT)
DECLARE @IdList2 TABLE(Id INT)

-- Approach 1
DELETE list1
FROM @IdList1 list1
INNER JOIN @IdList2 list2 ON list1.Id = list2.Id

-- Approach 2
DELETE FROM @IdList1
WHERE Id IN (SELECT Id FROM @IdList2)
Run Code Online (Sandbox Code Playgroud)

这两个列表可能包含超过10,000条记录.在这种情况下,两个查询都需要超过20秒才能执行.

执行计划也显示了一些我不理解的东西.也许这就解释了为什么它如此缓慢: 查询两个查询

我用10,000个连续的整数填充了两个列表,因此两个列表都包含值1-10.000作为起始点.

正如您所看到的,两个查询显示@ IdList2 实际行数为50.005.000 !!.@ IdList1是正确的(实际行数是10.000)

我知道还有其他解决方案如何解决这个问题.就像填写从第一个列表中删除的第三个列表一样.但我的问题是:

为什么这些删除查询这么慢,为什么我会看到这些奇怪的查询计划?

sql sql-server performance table-variable sql-execution-plan

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

如何检查SQL Server中的表变量是否为空?

这是我的一个存储过程的一部分:

@dataInTable dbo.Table_Variable readonly,
....

AND (
    ( @dataInTable IS NULL )
    OR
    ( item IN ( SELECT T FROM @dataInTable ) )
)
Run Code Online (Sandbox Code Playgroud)

@dataInTable IS NULL 语法错误,错误是

必须声明标量变量"@dataInTable"

所以我把它改成:

(SELECT T FROM @dataInTable) IS NULL
Run Code Online (Sandbox Code Playgroud)

这有效,但如果@dataInTable有多个项目,我收到一个错误:

子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.

可以理解,所以我把它改成:

(SELECT TOP(1) T FROM @ProgramRatings) IS NULL
Run Code Online (Sandbox Code Playgroud)

完美的工作,我所拥有的是性能问题.

我想知道,如果有更简单的方法来检查表变量是否为空,比如

AND (
    ( @dataInTable IS EMPTY )
    OR
    ( item IN ( SELECT T FROM @dataInTable ) )
)
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server null table-variable

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

在exists语句中使用表变量

我试图根据条件更新表变量中的列,条件是表变量的ID不存在于不同的表中:

DECLARE @BugRep TABLE(BugCode VARCHAR(50),DevFirstName VARCHAR(50), DevLastName    VARCHAR(50), BugDate VARCHAR(20), IsValid VARCHAR(1))

UPDATE @BugRep 
SET IsValid = 'N' WHERE NOT EXISTS(SELECT * FROM BUG b WHERE @BugRep.BUGCODE = b.CODE)
Run Code Online (Sandbox Code Playgroud)

当我尝试编译具有这些语句的过程时,我得到一个"必须声明标量变量"@BugRep"消息.

我如何在NOT EXISTS子句中使用表变量?

我正在使用SQL Server 2008

t-sql sql-server not-exists table-variable sql-server-2008

11
推荐指数
2
解决办法
4155
查看次数

表变量是在内存中还是在tempdb中创建和保存的?

表变量是在内存中还是在tempdb中创建的?短临时表也一样吗?

sql t-sql sql-server table-variable

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