2012-10-06 26 views

回答

5

試試這個:

SET NOCOUNT ON 

SELECT 'USE ' + QUOTENAME(DB_NAME(), '[') + ' 
GO'; 

SELECT ' 
IF EXISTS (SELECT * FROM sys.types st JOIN sys.schemas ss ON st.schema_id = ss.schema_id WHERE st.name = N''' + st.[name] + ''' AND ss.name = N''' + ss.[name] + ''') 
    DROP TYPE ' + QUOTENAME(ss.name, '[') + '.' + QUOTENAME(st.name, '[') + ' 
GO 

CREATE TYPE ' + QUOTENAME(ss.name, '[') + '.' + QUOTENAME(st.name, '[') + ' FROM ' + 
QUOTENAME(bs.[name], '[') + 
    CASE bs.[name] 
     WHEN 'char' THEN (CASE ISNULL(st.max_length, 0) WHEN 0 THEN '' WHEN -1 THEN '(MAX)' ELSE '(' + convert(varchar(10), st.max_length) + ')' END) 
     WHEN 'nchar' THEN (CASE ISNULL(st.max_length, 0) WHEN 0 THEN '' WHEN -1 THEN '(MAX)' ELSE '(' + convert(varchar(10), st.max_length/2) + ')' END) 
     WHEN 'varchar' THEN (CASE ISNULL(st.max_length, 0) WHEN 0 THEN '' WHEN -1 THEN '(MAX)' ELSE '(' + convert(varchar(10), st.max_length) + ')' END) 
     WHEN 'nvarchar' THEN (CASE ISNULL(st.max_length, 0) WHEN 0 THEN '' WHEN -1 THEN '(MAX)' ELSE '(' + convert(varchar(10), st.max_length/2) + ')' END) 
     WHEN 'numeric' THEN (CASE ISNULL(st.[precision], 0) WHEN 0 THEN '' ELSE '(' + convert(varchar(10), st.[precision]) + ', ' + convert(varchar(10), st.[scale]) + ')' END) 
     WHEN 'decimal' THEN (CASE ISNULL(st.[precision], 0) WHEN 0 THEN '' ELSE '(' + convert(varchar(10), st.[precision]) + ', ' + convert(varchar(10), st.[scale]) + ')' END) 
     WHEN 'varbinary' THEN (CASE st.max_length WHEN -1 THEN '(max)' ELSE '(' + convert(varchar(10), st.max_length) + ')' END) 
     ELSE '' 
    END + 
' 
GO 
' 
FROM sys.types st 
    INNER JOIN sys.schemas ss ON st.[schema_id] = ss.[schema_id] 
    INNER JOIN sys.types bs ON bs.[user_type_id] = st.[system_type_id] 
WHERE st.[is_user_defined] = 1 -- exclude system types 
ORDER BY st.[name], ss.[name] 

免責聲明:我不是這個劇本的作者。只是我把它放在我的私人圖書館裏。不幸的是作者的名字不在其中。

+1

這正是我想要的!非常感謝分享,感謝作者:) – NFRiaCowboy

0

除了什麼vmvadivel說(這就像一個魅力!)這是一個腳本來爲你做,只是轉儲碼在那裏,並命名SQL文件getTypesSelect.sql,這將工作:

@echo off 
cls 

set /p SName=Server Name : 
set /p UName=User Name : 
set /p Pwd=Password : 
set /p DbName=Database Name : 

set /p choice=ARE YOU SURE TO EXECUTE SCRIPTS in %DbName% (y/n) ? 

if '%choice%'=='y' goto begin 
goto end 

:begin 
if exist addUserDefinedTypes.sql del addUserDefinedTypes.sql 

@echo on 

SQLCMD -S %SName% -d %DbName% -U %UName% -i "getTypesSelect.sql" -o addUserDefinedTypes.txt -P %Pwd% 

rename addUserDefinedTypes.txt addUserDefinedTypes.sql 

@notepad addUserDefinedTypes.sql 

:end 

取下sql查詢以下行上面,如果你打算到不同的數據庫(你可能會這)

SELECT 'USE ' + QUOTENAME(DB_NAME(), '[') + ' 
GO'; 
相關問題