Skip to content

Prepare test data 2

SQL
alter procedure dbo.[test_data_types]
    @test_uniqueidentifier uniqueidentifier = null , 
    @test_date date = null, 
    @test_time time = null, 
    @test_datetime2 datetime2 = null, 
    @test_nvarchar nvarchar(250) = null, 
    @test_smalldatetime smalldatetime = null, 
    @test_datetime datetime = null, 
    @test_tinyint tinyint=null,
    @test_smallint smallint=null,
    @test_int int =null,
    --real
    --money
    --datetime
    --float
    --sql_variant
    --ntext
    --bit
    @test_decimal decimal=null,
    @test_numeric numeric=null,
    @test_smallmoney smallmoney=null,
    @test_bigint bigint  =null,
    --hierarchyid
    --geometry
    --geography
    --varbinary
    --varchar
    --binary
    --char
    --timestamp
    --nvarchar
    --nchar
    @test_xml xml =null

as

Begin

    --exec dbo.[test_data_types]

    select  
     name   ,
        type_name(user_type_id) Type,  
        case when type_name(system_type_id) = 'uniqueidentifier' 
        then precision else OdbcPrec(system_type_id, max_length, precision) end Length,  
        OdbcScale(system_type_id, scale) scale
    from sys.parameters where object_id = object_id('dbo.[test_data_types]')

    SELECT 
      name,
      max_length,
      [precision],
      scale,
      is_user_defined
    FROM sys.types;


end




CREATE TABLE [dbo].[TestData](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [tuuid] [uniqueidentifier] NULL,
    [tint] [int] NULL,
    [tvarchar] [varchar](150) NULL,
    [tdecimal] [decimal](18, 2) NULL,
    [tsmalldate] [smalldatetime] NULL,
 CONSTRAINT [PK_TestData] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TestData] ADD  CONSTRAINT [DF_TestData_tuuid]  DEFAULT (newid()) FOR [tuuid]

-- Generate numbers from 1 to 1,000,000 using a recursive CTE
;WITH CTE_Numbers AS (
    SELECT 1 AS Number
    UNION ALL
    SELECT Number + 1
    FROM CTE_Numbers
    WHERE Number < 1000000
)
INSERT INTO TestData (tint,tvarchar,tdecimal,tsmalldate)
SELECT Number,CONVERT(varchar(255), NEWID()),ROUND(RAND(CHECKSUM(NEWID())) * (1000000), 2),DATEADD(day, (ABS(CHECKSUM(NEWID())) % 65530), 0)
FROM CTE_Numbers
OPTION (MAXRECURSION 0) -- Enable unlimited recursion

-- Verify the data
SELECT COUNT(*) AS NumRows
FROM TestData
select top 100 * from TestData order by tdecimal asc
-- Cleanup
--DROP TABLE TestData