NguyenL71
Posting Yak Master
228 Posts |
Posted - 2012-02-14 : 12:59:31
|
[code]I need to filter out certain columns to change only to Time datatype. How can I check this filter condition in the Loop. Please see the desire results below.Thanks in advance.-- Requirements:Change ProcessTime DATETIME to ProcessTime Time -- this is Advantage datatype.--run this 1.IF OBJECT_ID('dbo.MyTest', 'u') IS NOT NULL DROP TABLE dbo.MyTestGOCREATE TABLE dbo.MyTest( CustId INT IDENTITY (1, 1) NOT NULL, LoginId VARCHAR(50) NULL, FullName CHAR(20) NULL, NMLSId INT NOT NULL, DoseStatus SMALLINT NULL, MaxDos NUMERIC(19, 4) NULL, AmountPaid MONEY NULL, StopDt SMALLDATETIME NULL, ProcessTime DATETIME NULL, UpdateDt DATETIME NULL, ProcessND BIT NULL, MyNote VARCHAR(MAX) NULL, YourComment VARBINARY(MAX) NULL)go-- 2 execute sp below.EXECute dbo.usp_ConvertADSDataType @TableName = 'MyTest'goIF NULLIF(object_id('dbo.usp_ConvertADSDataType'), 0) > 0 DROP procedure dbo.usp_ConvertADSDataTypeGOCREATE PROCEDURE dbo.usp_ConvertADSDataType( @TableName VARCHAR(60) = NULL)AS/********************************************************************************************** History:** Date Analyst Reason.** xx/xx/xx xxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.************************************************************************************************/SET NOCOUNT ONDECLARE @cmd VARCHAR(8000), @ord_pos INTIF OBJECT_ID('Tempdb..##TableName', 'u') IS NOT NULL DROP TABLE ##TableNameCREATE TABLE ##TableName( TableName VARCHAR(60) NULL) INSERT ##TableName (TableName) SELECT CAST(TABLE_NAME AS VARCHAR(60)) AS 'TableName' FROM INFORMATION_SCHEMA.TABLES WHERE (TABLE_TYPE = 'BASE TABLE') AND TABLE_NAME NOT IN ('dtproperties', 'sysdiagrams') AND RTRIM(TABLE_NAME) = ISNULL(@TableName, RTRIM(TABLE_NAME) ) ORDER BY TableName ASC SET @TableName = (SELECT MIN(TableName) FROM ##TableName) WHILE (@TableName IS NOT NULL) BEGIN IF (@TableName IS NULL) BEGIN PRINT 'Get out the here.' BREAK END PRINT ' ' PRINT 'CREATE TABLE ' + @TableName PRINT '(' SET @ord_pos = 1 WHILE (@ord_pos < (SELECT MAX(ordinal_position) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @tablename) + 1) BEGIN SET @cmd = (SELECT SPACE(2) + SUBSTRING(t1.column_name,1,60) + SPACE(3) + CASE WHEN ( DATA_TYPE = 'INT' AND COLUMNPROPERTY(OBJECT_ID(table_name), column_name, 'ISIDENTITY') = 1) THEN 'AutoInc' WHEN ( DATA_TYPE = 'INT' ) THEN 'Integer' WHEN ( DATA_TYPE = 'SMALLINT' ) THEN 'Short' WHEN ( DATA_TYPE = 'BIT' ) THEN 'Logical' WHEN ( DATA_TYPE = 'Float' ) THEN 'Float' WHEN ( DATA_TYPE = 'DATETIME') THEN 'Timestamp' WHEN ( DATA_TYPE = 'SMALLDATETIME' ) THEN 'DATE' WHEN ( DATA_TYPE IN ('DECIMAL', 'NUMERIC') ) THEN 'Double' WHEN ( DATA_TYPE = 'VARBINARY' AND CHARACTER_MAXIMUM_LENGTH = -1 ) THEN 'Blob' WHEN ( DATA_TYPE = 'VARCHAR' AND CHARACTER_MAXIMUM_LENGTH = -1 ) THEN 'Memo' WHEN ( DATA_TYPE = 'MONEY' ) THEN 'CurDouble' WHEN data_type IN ('CHAR', 'VARCHAR', 'NCHAR', 'NVARCHAR') THEN 'Char(' + RTRIM(character_maximum_length) + ')' END + SPACE(0) + CASE WHEN Is_Nullable = 'Yes' THEN '' ELSE ' NOT NULL' END + CASE WHEN (LEN(column_default) > 0) THEN SPACE(2) + 'DEFAULT ' + t1.column_default ELSE '' END + CASE WHEN (@ord_pos + 1) < ( (SELECT MAX(ordinal_position) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @tablename) + 1) THEN ',' ELSE '' END FROM INFORMATION_SCHEMA.COLUMNS AS t1 WHERE (t1.table_name = @tablename) AND (t1.ordinal_position = @ord_pos) ) PRINT @cmd SET @ord_pos = (@ord_pos + 1) END PRINT ')' SET @TableName = (SELECT MIN(TableName) FROM ##TableName WHERE TableName > @TableName) ENDGO--------------------------------------------------------------------------------------------------- -- Result want 3.CREATE TABLE MyTest( CustId AutoInc NOT NULL, LoginId Char(50), FullName Char(20), NMLSId Integer NOT NULL, DoseStatus Short, MaxDos Double, AmountPaid CurDouble, StopDt DATE, ProcessTime Time, -- Result want change from DATETIME to Time datatype only. Only certain columns need to filter out. UpdateDt Timestamp, ProcessND Logical, MyNote Memo, YourComment Blob)[/code] |
|