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