NguyenL71
Posting Yak Master
228 Posts |
Posted - 2012-02-13 : 14:33:31
|
[code]Hi,I need to develope script/sp to generate all the tables in all DBs. Currently, I have 10 DBs and 300 tables for Each DB, I a script to convert SQL Server toAdvantage datetypes. Please see the desire results below. I am using SQL Server 2008.Thank you so much in advance.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, 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--Convert SQL Server to Advantage datatypes:From To:SQL ADS------ ----VarChar(n) Char(n)Int IntegerInt Identity(1,1) AutoIncSmallInt ShortNumeric(19,4) DoubleMoney CurDoubleSmallDateTime DateDateTime Time -- 5% Note: Will use time portion only in certain columns and tables.DateTime TimeStamp -- 95%Bit LogicalVarChar(Max) MemoVarBinary(Max) Blob-- Desire output:IF OBJECT_ID('dbo.MyTest', 'u') IS NOT NULL DROP TABLE dbo.MyTestGOCREATE TABLE dbo.MyTest( CustId AutoInc NOT NULL, LoginId CHAR(50) NULL, NMLSId INTEGER NOT NULL, DoseStatus SMALLINT NULL, MaxDos Double NULL, AmountPaid CurDouble NULL, StopDt Date NULL, ProcessTime Time NULL, -- Specify column name. UpdateDt Timestamp NULL, ProcessND Logical NULL, MyNote Memo NULL, YourComment Blob NULL)go-- Testing...-- How can I change the SP to convert to Advantage datatypes when I run the sp below. Thanks in advance./* SELECT '"' + CAST(COLUMN_NAME AS VARCHAR(50)) + '"' , + CAST (CASE 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 'Time' 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 data_type + '(' + RTRIM(character_maximum_length) + ')' ELSE DATA_TYPE END AS VARCHAR(25)) ,RTRIM(CASE WHEN IS_NULLABLE = 'Yes' THEN '' ELSE 'NOT NULL' END ) + ', ' --, CHARACTER_MAXIMUM_LENGTH, FROM INFORMATION_SCHEMA.Columns WHERE (RTRIM(TABLE_NAME) = 'agent') ORDER BY 1 ASC*/IF NULLIF(object_id('dbo.usp_tablescript'), 0) > 0 DROP procedure dbo.usp_tablescriptGOCREATE PROCEDURE dbo.usp_tablescript( @TableName VARCHAR(60) = NULL)AS/********************************************************************************************** History:** Date Analyst Reason.** xx/xx/xx xxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.************************************************************************************************/SET NOCOUNT ONDECLARE @cmd VARCHAR(8000), @ord_pos INT /* IF (@tablename IS NULL) BEGIN PRINT 'Input @tablename must be entered. Please check...' SET NOCOUNT OFF RETURN (1) END IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = @tablename) ) BEGIN PRINT 'Table name ' + UPPER(@tablename) + ' does not exist.' SET NOCOUNT OFF RETURN (1) END PRINT 'IF NULLIF(OBJECT_ID(''dbo.' + RTRIM(@tablename) + '''), 0) > 0' PRINT ' DROP TABLE dbo.' + @tablename PRINT 'go' PRINT ' ' PRINT GETDATE() PRINT @@Servername PRINT db_name() */IF 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 ASCSET @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 dbo.' + @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) + UPPER(RTRIM(t1.data_type)) + CASE WHEN COLUMNPROPERTY(OBJECT_ID(t1.table_name), t1.column_name, 'ISIDENTITY') = 1 THEN ' IDENTITY' ELSE '' END + CASE WHEN t1.data_type IN('CHAR', 'VARCHAR', 'NCHAR', 'NVARCHAR') THEN '(' + RTRIM(character_maximum_length) + ')' WHEN t1.data_type IN('DECIMAL', 'NUMERIC') THEN '(' + RTRIM(numeric_precision) + ',' + RTRIM(numeric_scale) + ')' ELSE '' END + SPACE(2) + CASE WHEN Is_Nullable = 'Yes' THEN 'NULL' 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-------------------------------------------------------------------------------------------------EXECute dbo.usp_tablescript @TableName = 'MyTest'go[/code] |
|