标签: table-variable

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

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

sql t-sql sql-server table-variable

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

如何将表名作为存储过程的输入参数?

我下面有一个小的存储过程.

我将表名作为存储过程的输入参数,以便我计划将数据插入临时表并显示相同的内容.这只是我项目存储过程的一个很小的代码块.

当我编译下面的内容时,它会将select语句中的参数视为表变量并将错误抛出为:

必须声明表变量"@TableName".

SQL:

CREATE PROCEDURE xyz @TableName Varchar(50) 
AS 
BEGIN 
SELECT TOP 10 * INTO #Temp_Table_One 
FROM @TableName 

SELECT * FROM #Temp_Table_One 
END
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures table-variable

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

表变量在SQL Server存储过程中插入时性能不佳

我们在存储过程中使用表变量时遇到性能问题.

这是实际发生的事情:

DECLARE @tblTemp TABLE(iId_company INT)

INSERT INTO @tblTemp(iId_company)
  SELECT id FROM .....
Run Code Online (Sandbox Code Playgroud)

SELECT返回138个结果,但插入TABLE变量需要1分15但是当我使用具有相同SELECT的临时表时,woops需要0sec:

CREATE TABLE #temp (iId_company INT)

INSERT INTO #temp(iId_company)
  SELECT id FROM ...
Run Code Online (Sandbox Code Playgroud)

什么可能导致这种行为?

sql-server stored-procedures temp-tables table-variable

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

为什么临时表比表变量更快?

为什么临时表比SQL Server中的连接的表变量更快?

注意:在两种情况下,表都有PK,表通过PK与其他"物理"表连接.

sql-server join temp-tables table-variable

7
推荐指数
2
解决办法
9831
查看次数

如何声明具有相同结构的两个表变量?

我有以下表变量声明:

DECLARE @MyTable TABLE
(
   --ten columns declared here
)
Run Code Online (Sandbox Code Playgroud)

并且我想声明另一个具有相同结构的表变量(以便我将select-from-select插入到第一个,然后将结果复制到第二个,然后我逐个从第一个变量中删除条目并返回第二个结果是).

我试过这个:

DECLARE @MyTable, @MyTableCopy TABLE
(
   --ten columns declared here
)
Run Code Online (Sandbox Code Playgroud)

但SQL Server Express并不满意

消息102,级别15,状态1,行1','附近的语法不正确.

如何声明两个结构相同的表变量?

sql-server table-variable

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

结构化类型必须至少有一个字段 c#

我真正想要做的是我想向 SQL Server 发送一个字符串数组。我正在使用 SQL Server 2008。

这可以标记为重复,但在从 stactoverflow 实施解决方案时,我面临着另一个问题

链接如何将数组传递到 SQL Server 存储过程

这是我的 C# 和存储过程代码

C#代码:

string[] str = new string[] {"s" , "a" , "k"};

DataTable dt = new DataTable();
dt.Columns.Add("names");

foreach (string item in str)
{
    dt.Rows.Add(item);
}

foreach (DataRow r in dt.Rows)
{
    Console.WriteLine(r["names"].ToString());
}

DataTable tvp = new DataTable();

SqlConnection conn = new SqlConnection("Data Source=SHZAK;Initial Catalog=synchroniztionTesing;Integrated Security=True");
conn.Open();

using (conn)
{
    SqlCommand cmd = new SqlCommand("strpdPassAnStringArray", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    SqlParameter …
Run Code Online (Sandbox Code Playgroud)

c# sql-server stored-procedures table-variable

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

使用表变量将多行插入SQL Server表

我目前正在使用SQL Server 2008,我正在尝试使用表变量创建一个语句,以在表中插入多行.就目前而言,我必须在4个不同的位置插入信息(2个选择语句,1个插入和1个更新),但是希望能够创建单个表变量,所以我只需要输入信息一次.任何帮助/建议将不胜感激.

这是我想要改变的一个例子.

PRINT 'Before'
SELECT  GROUPID, ModifiedBy, ModifiedDate
FROM TableXYZ
WHERE groupID in(ID1, ID2, ID3, ID4)                                                            

BEGIN TRAN


Insert into TableXYZ
 (GROUPID)
VALUES
 (ID1), (ID2), (ID3), (ID4)                                                             



UPDATE TableXYZ
SET existingdays = 15
    ,ModifiedBy = @userID
    ,ModifiedDate = @today
WHERE groupID in(ID1, ID2, ID3, ID4)                                                            


Set  @RowCount =  @@ROWCOUNT 


PRINT 'After '

SELECT  GROUPID, ModifiedBy, ModifiedDate
FROM TableXYZ
WHERE groupID in(ID1, ID2, ID3, ID4)    
Run Code Online (Sandbox Code Playgroud)

sql insert table-variable sql-server-2008

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

Dapper:将行插入表变量

我最近一直在使用dapper,总而言之,除了使用表变量之外,它没有任何问题。

为了进行演示,我使用了此线程中的修改示例。

这段代码运行没有问题:

int tally = connection.Execute(
    "create table #t(Name nvarchar(max), Age int)\n" +
    "insert #t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });
Run Code Online (Sandbox Code Playgroud)

但这并没有:

int tally = connection.Execute(
    "create table @t(Name nvarchar(max), Age int)\n" +
    "insert @t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });
Run Code Online (Sandbox Code Playgroud)

唯一的变化是使用表变量而不是临时表 ( @ instead #)。Dapper(或链中的其他任何东西?)似乎以某种方式将其与参数混合并返回“必须声明表变量@t …

c# sql insert table-variable dapper

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

每次循环时没有初始化的表变量:SQL Server

我想知道为什么while循环中的表变量不像其他变量那样.表变量只创建一次,将在整个循环中使用.但是每当循环增加时,其他变量都会被初始化.

有关详细信息,请查看以下代码

declare @tt int
set @tt =10
while @tt>0
begin

        declare @temptable table(id int identity(1,1),sid bigint)
        insert into @temptable 
                select @tt union all
                select @tt + 1 

                select * from @temptable 
               --delete from @temptable
                set @tt=@tt-1
end
Run Code Online (Sandbox Code Playgroud)

这是一个错误?

sql-server while-loop table-variable

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

如何在"从select更新"查询中使用表变量?

我有这个表变量声明后跟一个查询:

DECLARE @CurrentItems TABLE
(
    ItemId uniqueidentifier,
    ItemUnits int
)

UPDATE U SET U.Units = U.Units + [@CurrentItems].ItemUnits
    FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId;
Run Code Online (Sandbox Code Playgroud)

U定义如下:

CREATE TABLE [dbo].[U] (
    [UId]         UNIQUEIDENTIFIER UNIQUE NOT NULL,
    [Units]       INT DEFAULT ((0)) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

当我在SQL Management Studio中针对SQL Server 2005 Express运行时,我得到以下内容:

Msg 208,Level 16,State 1,Line 24

无效的对象名称'@CurrentItems'.

我已经看过这个这个非常相似的问题,但无法弄清楚如何解决问题.

什么是实际问题,我该如何解决?

sql t-sql sql-server sql-server-2005 table-variable

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