/ notes / sql

-- Experiments adding and removing big varbinary data

--DBCC SHRINKFILE (N'Test001' , 1)
--DBCC SHRINKFILE (N'Test001_log' , 1)

-- Create the test table
-- CREATE TABLE dbo.DataTable ( ID int NOT NULL IDENTITY (1, 1), Name nvarchar(50) NOT NULL, BinData varbinary(MAX) NULL )  ON [PRIMARY]	 TEXTIMAGE_ON [PRIMARY]
-- ALTER TABLE dbo.DataTable ADD CONSTRAINT PK_DataTable PRIMARY KEY CLUSTERED ( ID ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]


DECLARE @i int = 0


-- fill a big Varbinary variable
DECLARE @bigVarbin varbinary (max) = 0x;  -- empty
SET @i = 0
WHILE @i < 100
BEGIN
    SET @i = @i + 1   
	SELECT @bigVarbin = @bigVarbin + CRYPT_GEN_RANDOM(1000) ; 
END
select Len(@bigVarbin) as BigBinLength


-- empty table
TRUNCATE TABLE [DataTable]


-- fill the table
SET @i = 0
WHILE @i < 1000
BEGIN
    SET @i = @i + 1   
	INSERT INTO [DataTable] ([Name],[BinData]) VALUES ('name', @bigVarbin);	
END
SELECT top(1) * FROM DataTable
SELECT count(1) as TotRows FROM DataTable


-- remove part of the data
EXEC sp_spaceused 'DataTable';
SELECT count(1) as FilledRows FROM DataTable where [BinData] IS NOT NULL
--UPDATE [DataTable] SET [BinData] = NULL WHERE ID >500
UPDATE [DataTable] SET [BinData] = NULL WHERE ID & 2 = 0
SELECT count(1) as FilledRows FROM DataTable where [BinData] IS NOT NULL
EXEC sp_spaceused 'DataTable';