相关疑难解决方法(0)

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

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

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

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

sql-server temp-tables table-variable

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

在表变量上创建索引

你能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 SELECT多列INTO多变量

我正在将SQL从Teradata转换为SQL Server

在Teradata,他们有格式

SELECT col1, col2
FROM table1
INTO @variable1, @variable2
Run Code Online (Sandbox Code Playgroud)

在SQL Server中,我找到了

SET @variable1 = (
SELECT col1 
FROM table1
);
Run Code Online (Sandbox Code Playgroud)

这只允许每个语句使用一个列/变量.如何使用单个SELECT语句分配2个或更多变量?

sql sql-server teradata

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

如何在SQL Server的触发器中编辑INSERT的值?

我有桌子 Tb

ID | Name   | Desc
-------------------------
 1 | Sample | sample desc
Run Code Online (Sandbox Code Playgroud)

我想在INSERT上创建一个触发器,它将改变插入的值Desc,例如:

INSERT INTO Tb(Name, Desc) VALUES ('x', 'y')
Run Code Online (Sandbox Code Playgroud)

会导致

ID | Name   | Desc
-------------------------
 1 | Sample | sample desc
 2 | x      | Y edited
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我得到了插入的值,将其Desc更改为大写并添加edited到最后.

这就是我需要的,得到Desc插入和修改它.

我怎样才能做到这一点?

插入更新后处理它会更好吗?或者使用INSTEAD OF INSERT触发并在每次表结构更改时修改它?

sql t-sql sql-server triggers sql-server-2008

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

没有 WHILE 循环的查询

我们有如下所示的预约表。每个约会都需要归类为“新”或“后续”。在(该患者的)首次预约后 30 天内的任何预约(对患者)都是随访。30 天后,约会再次“新”。30 天内的任何约会都将成为“后续”。

我目前正在通过输入 while 循环来做到这一点。
如何在没有 WHILE 循环的情况下实现这一目标?

在此处输入图片说明

桌子

CREATE TABLE #Appt1 (ApptID INT, PatientID INT, ApptDate DATE)
INSERT INTO #Appt1
SELECT  1,101,'2020-01-05' UNION
SELECT  2,505,'2020-01-06' UNION
SELECT  3,505,'2020-01-10' UNION
SELECT  4,505,'2020-01-20' UNION
SELECT  5,101,'2020-01-25' UNION
SELECT  6,101,'2020-02-12'  UNION
SELECT  7,101,'2020-02-20'  UNION
SELECT  8,101,'2020-03-30'  UNION
SELECT  9,303,'2020-01-28' UNION
SELECT  10,303,'2020-02-02' 
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2016

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

SQL Server中用户定义的表类型的性能

我们一直在使用用户定义的表类型将整数列表传递给我们的存储过程.

然后我们使用它们连接到存储过程查询中的其他表.

例如:

CREATE PROCEDURE [dbo].[sp_Name]
(
    @Ids [dbo].[OurTableType] READONLY  
)
AS
    SET Nocount ON

    SELECT
        *
    FROM
        SOMETABLE
        INNER JOIN @Ids [OurTableType] ON [OurTableType].Id = SOMETABLE.Id
Run Code Online (Sandbox Code Playgroud)

在使用更大的数据集时,我们发现这方面的表现很差.

我们用来加快速度的一种方法是将内容转储到临时表中,然后将其加入.

例如:

CREATE PROCEDURE [dbo].[sp_Name]
(
    @Ids [dbo].[OurTableType] READONLY  
)
AS
    SET Nocount ON
    CREATE TABLE #TempTable(Id INT)
    INSERT INTO #TempTable
    SELECT Id from @Ids

    SELECT
        *
    FROM
        SOMETABLE
        INNER JOIN #TempTable ON #TempTable.Id = SOMETABLE.Id

    DROP TABLE #TempTable
Run Code Online (Sandbox Code Playgroud)

这确实显着提高了性能,但我希望对这种方法以及我们未考虑的任何其他后果有所了解.关于为什么这改善性能的解释也可能是有用的.

NB有时我们可能需要传递的不仅仅是一个整数,因此我们不使用逗号分隔列表或类似的东西.

t-sql sql-server user-defined-types table-valued-parameters sql-server-2008-r2

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

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

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

sql t-sql sql-server table-variable

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

这个用于表变量批量插入的SQL语句有什么问题

我正在尝试将CS​​V插入到临时表中,并且此SQL语句似乎不起作用.

DECLARE @TempTable TABLE (FName nvarchar(max),SName nvarchar(max),
                          Email nvarchar(max));
BULK INSERT @TempTable 
FROM 'C:\52BB30AD694A62A03E.csv' 
WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')
Run Code Online (Sandbox Code Playgroud)

得到以下错误....

Incorrect syntax near '@TempTable'.

sql sql-server

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

如何在LINQ to SQL的存储过程中使用临时表

我在使用LINQ to SQL的存储过程中使用临时表.我将存储过程添加到Linq到SQL dbml文件然后项目发生错误消息

"未知的返回类型 - 无法检测到以下存储过程的返回类型."

当我删除存储过程中的临时表时,返回值很好.

如何在Linq to SQL的存储过程中使用临时表

我替换了这样的临时表

  CREATE TABLE tempTable(
PartsReceivingID INT, 
SoPartID INT,
RecvQty INT,
ReturnQty INT
)
Run Code Online (Sandbox Code Playgroud)

替换如下

  SELECT @RowCount = count(*)           
  FROM Parts.studentTempTable          
   IF @RowCount > 0         
           BEGIN             
             TRUNCATE TABLE Parts.studentTempTable;
           END  
Run Code Online (Sandbox Code Playgroud)

工作版存储过程

ALTER  PROCEDURE [dbo].[stp_student_Select_New] 
                @pSchID as int, 
                @pCompanyID as int,
                @pAgingDate as int,
                @pTicketNo as VARCHAR(50),
                @pInvoiceNo as VARCHAR(50),
                @pDeliveryNo as VARCHAR(50),
                @pPartNo as VARCHAR(50)
As
SET NOCOUNT ON
BEGIN
          SELECT @RowCount = count(*)
          FROM Parts.studentTempTable

        IF @RowCount > 0 …
Run Code Online (Sandbox Code Playgroud)

stored-procedures linq-to-sql vb.net-2010

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

MSSQL中CTE,临时表和表变量的区别

所有都用于临时存储数据.

这3种临时表是否存在性能差异(时间复杂度和空间复杂度)?

性能问题应取决于结果是保存在磁盘还是内存中.

我搜索了很多,但没有得到满意的答案.

sql sql-server performance temp-tables common-table-expression

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

TSQL在tsql中声明一个变量,而不显式定义列

是否可以在tsql中声明一个变量而不显式定义列?

就像是

declare @tab as select * from myTable
Run Code Online (Sandbox Code Playgroud)

t-sql

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

使用Table变量比临时表更快

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

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

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

在SQL Server存储过程中声明变量列表

我想从每个删除语句的相同条件(where子句)的多个表中删除数据.

delete from tblA where id in (select x.id from tblX x where name like N'%test%')
delete from tblB where id in (select x.id from tblX x where name like N'%test%')
delete from tblC where id in (select x.id from tblX x where name like N'%test%')
delete from tblD where id in (select x.id from tblX x where name like N'%test%')
Run Code Online (Sandbox Code Playgroud)

有没有办法声明一个列表来存储上面的select语句中的id?

我试过了:

declare @ids int
set @ids = select x.id from tblX x where name like N'%test%'
Run Code Online (Sandbox Code Playgroud)

但它抱怨说

子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> …

sql sql-server-2012

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