in Education by
How can I determine the space used by a table variable without using DATALENGTH on all columns? eg: DECLARE @T TABLE ( a bigint, b bigint, c int, d varchar(max) ) insert into @T select 1,2,3, 'abc123' exec sp_spaceused @T Trying to work out how much memory a Table variable consumes when running a stored procedure. I know in this example I can go: SELECT DATALENGTH(a) + DATALENGTH(b) + DATALENGTH(c) + DATALENGTH(d) But is there any other way other than doing DATALENGTH on all table columns? JavaScript questions and answers, JavaScript questions pdf, JavaScript question bank, JavaScript questions and answers pdf, mcq on JavaScript pdf, JavaScript questions and solutions, JavaScript mcq Test , Interview JavaScript questions, JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)

1 Answer

0 votes
by
The metadata for table variables is pretty much the same as for other types of tables so you can determine space used by looking in various system views in tempdb. The main obstacle is that the table variable will be given an auto generated name such as #3D7E1B63 and I'm not sure if there is a straight forward way of determining its object_id. The code below uses the undocumented %%physloc%% function (requires SQL Server 2008+) to determine a data page belonging to the table variable then DBCC PAGE to get the associated object_id. It then executes code copied directly from the sp_spaceused procedure to return the results. DECLARE @T TABLE ( a bigint, b bigint, c int, d varchar(max) ) insert into @T select 1,2,3, 'abc123' DECLARE @DynSQL nvarchar(100) SELECT TOP (1) @DynSQL = 'DBCC PAGE(2,' + CAST(file_id AS VARCHAR) + ',' + CAST(page_id AS VARCHAR) + ',1) WITH TABLERESULTS' FROM @T CROSS APPLY sys.fn_PhysLocCracker(%%physloc%%) DECLARE @DBCCPage TABLE ( [ParentObject] [varchar](100) NULL, [Object] [varchar](100) NULL, [Field] [varchar](100) NULL, [VALUE] [varchar](100) NULL ) INSERT INTO @DBCCPage EXEC (@DynSQL) DECLARE @id int SELECT @id = VALUE FROM @DBCCPage WHERE Field = 'Metadata: ObjectId' EXEC sp_executesql N' USE tempdb declare @type character(2) -- The object type. ,@pages bigint -- Working variable for size calc. ,@dbname sysname ,@dbsize bigint ,@logsize bigint ,@reservedpages bigint ,@usedpages bigint ,@rowCount bigint /* ** Now calculate the summary data. * Note that LOB Data and Row-overflow Data are counted as Data Pages. */ SELECT @reservedpages = SUM (reserved_page_count), @usedpages = SUM (used_page_count), @pages = SUM ( CASE WHEN (index_id < 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count) ELSE lob_used_page_count + row_overflow_used_page_count END ), @rowCount = SUM ( CASE WHEN (index_id < 2) THEN row_count ELSE 0 END ) FROM sys.dm_db_partition_stats WHERE object_id = @id; /* ** Check if table has XML Indexes or Fulltext Indexes which use internal tables tied to this table */ IF (SELECT count(*) FROM sys.internal_tables WHERE parent_id = @id AND internal_type IN (202,204,211,212,213,214,215,216)) > 0 BEGIN /* ** Now calculate the summary data. Row counts in these internal tables don''t ** contribute towards row count of original table. */ SELECT @reservedpages = @reservedpages + sum(reserved_page_count), @usedpages = @usedpages + sum(used_page_count) FROM sys.dm_db_partition_stats p, sys.internal_tables it WHERE it.parent_id = @id AND it.internal_type IN (202,204,211,212,213,214,215,216) AND p.object_id = it.object_id; END SELECT name = OBJECT_NAME (@id), rows = convert (char(11), @rowCount), reserved = LTRIM (STR (@reservedpages * 8, 15, 0) + '' KB''), data = LTRIM (STR (@pages * 8, 15, 0) + '' KB''), index_size = LTRIM (STR ((CASE WHEN @usedpages > @pages THEN (@usedpages - @pages) ELSE 0 END) * 8, 15, 0) + '' KB''), unused = LTRIM (STR ((CASE WHEN @reservedpages > @usedpages THEN (@reservedpages - @usedpages) ELSE 0 END) * 8, 15, 0) + '' KB'') ', N'@id int',@id=@id Returns name rows reserved data index_size unused ------------------------------ ----------- ------------------ ------------------ ------------------ ------------------ #451F3D2B 1 16 KB 8 KB 8 KB 0 KB

Related questions

0 votes
    Let's say I have the following simple table variable: declare @databases table ( DatabaseID int, Name ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Mar 25, 2022 in Education by JackTerrance
0 votes
    In SQL Server 2005, we can create temp tables one of two ways: declare @tmp table (Col1 int, Col2 ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Mar 27, 2022 in Education by JackTerrance
0 votes
    write algorithm and flowchart the inputs two numbers swaps these values without using third variable Select the correct answer from above options...
asked Nov 29, 2021 in Education by JackTerrance
0 votes
    This feels like a noobish question to which I should be able to find the answer on the web, but ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Apr 26, 2022 in Education by JackTerrance
0 votes
    I am struggling trying to update a row in an Azure SQL database. What I am trying to do is to ... , JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Apr 23, 2022 in Education by JackTerrance
0 votes
    DROP TYPE Position; CREATE OR REPLACE TYPE Position AS OBJECT (longitude NUMBER(11,7), lattitude NUMBER(11, ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Feb 18, 2022 in Education by JackTerrance
0 votes
    Which operator can be used to determine the size of a data type or variable?...
asked Jan 18, 2021 in Technology by JackTerrance
+1 vote
    Which operator can be used to determine the size of a data type or variable in C Programming?...
asked Nov 9, 2020 in Technology by JackTerrance
0 votes
    Is it possible to specify the jvm that the eclipse installer will use? I'm getting the error "Version ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Apr 26, 2022 in Education by JackTerrance
0 votes
    Basically I want to achieve using a lock to a property that has no private variable, the goal is ... JavaScript Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Apr 5, 2022 in Education by JackTerrance
0 votes
    AAE's "PDF Integration" command allows you to split a .pdf into a separate single file for a selected number ... by the hyphen. Select the correct answer from above options...
asked Feb 1, 2022 in Education by JackTerrance
0 votes
    write a program in c++ to interchange 2 values without the 3rd variable. Select the correct answer from above options...
asked Nov 26, 2021 in Education by JackTerrance
0 votes
    The strategy used to ensure that the message is a multiple of the cipher block size without compromising the size ... 1)Ciphertext stealing (2)Padding (3)Refactoring (4)Diffusion...
asked Mar 19, 2021 in Technology by JackTerrance
0 votes
    When modifying a table style in Excel 2013, the maximum stripe size is 5. Select the correct answer from above options...
asked Dec 31, 2021 in Education by JackTerrance
...