我處於必須使用腳本將現有數據庫結構從varchar更新爲nvarchar的情況。由於每次運行配置應用程序時都會運行此腳本,因此我寧願確定列是否已更改爲nvarchar,而不是在表上執行更改。我必須支持的數據庫是SQL Server 2000中,2005年和2008年SQL Server - 將數據庫列從varchar更新爲nvarchar的腳本(如果尚未更新)nvarchar
9
A
回答
2
下面的查詢應該得到你所需要的:
IF EXISTS
(SELECT *
FROM sysobjects syo
JOIN syscolumns syc ON
syc.id = syo.id
JOIN systypes syt ON
syt.xtype = syc.xtype
WHERE
syt.name = 'nvarchar' AND
syo.name = 'MY TABLE NAME' AND
syc.name = 'MY COLUMN NAME')
BEGIN
ALTER ...
END
26
您可以運行下面的腳本,這將給你一套ALTER的命令:
SELECT 'ALTER TABLE ' + isnull(schema_name(syo.id), 'dbo') + '.' + syo.name
+ ' ALTER COLUMN ' + syc.name + ' NVARCHAR(' + case syc.length when -1 then 'MAX'
ELSE convert(nvarchar(10),syc.length) end + ');'
FROM sysobjects syo
JOIN syscolumns syc ON
syc.id = syo.id
JOIN systypes syt ON
syt.xtype = syc.xtype
WHERE
syt.name = 'varchar'
and syo.xtype='U'
有,但是,一對夫婦的快速注意事項你。
- 這隻會做表格。您需要掃描所有的sprocs和函數,以確保它們也更改爲
NVARCHAR
。 - 如果你有一個
VARCHAR
> 4000,您將需要修改它是NVARCHAR(MAX)
但這些應與此模板容易可行。
如果您希望自動運行,您可以將其設置在WHILE
子句中。
2
修正的空間問題,添加的架構
SELECT 'ALTER TABLE [' + isnull(schema_name(syo.object_id), sysc.name) + '].[' + syo.name
+ '] ALTER COLUMN ' + syc.name + ' NVARCHAR(' + case syc.max_length when -1 then 'MAX'
ELSE convert(nvarchar(10),syc.max_length) end + ');'
FROM sys.objects syo
JOIN sys.columns syc ON
syc.object_id= syo.object_id
JOIN sys.types syt ON
syt.system_type_id = syc.system_type_id
JOIN sys.schemas sysc ON
syo.schema_id=sysc.schema_id
WHERE
syt.name = 'varchar'
and syo.type='U'
4
與約瑟夫的回答的問題是,它會執行查詢後更改NOT NULL
領域NULL
。下面的操作解決它:
SELECT cmd = 'alter table [' + c.table_schema + '].[' + c.table_name
+ '] alter column [' + c.column_name + '] nvarchar('
+CASE WHEN CHARACTER_MAXIMUM_LENGTH<=4000
THEN CAST(CHARACTER_MAXIMUM_LENGTH as varchar(10)) ELSE 'max' END+')'
+ CASE WHEN IS_NULLABLE='NO' THEN ' NOT NULL' ELSE '' END,*
FROM information_schema.columns c
WHERE c.data_type='varchar'
ORDER BY CHARACTER_MAXIMUM_LENGTH desc
相關問題
- 1. 將SQL Server數據庫中的所有varchar列更改爲nvarchar
- 2. 在SQL Server中更改列varchar(255)nvarchar
- 3. 將varchar更改爲數據庫中所有表列的nvarchar
- 4. 更改NVARCHAR到VARCHAR列數據類型
- 5. 在SQL Server 2008中將數據列從varchar(max)更改爲nvarchar(max)
- 6. 將所有VARCHAR列更改爲NVARCHAR
- 7. 用nvarchar更新DATEADD?
- 8. 通過sql腳本更改nvarchar的Dateformat
- 9. 將字段類型從nvarchar(255)更改爲SQL Server 2005中的nvarchar(Max)
- 10. 將varchar轉換爲nvarchar
- 11. 如何在SQL Server 2008中將所有varchar數據類型列更改爲Nvarchar數據類型列
- 12. 的SQL Server CE更新不與nvarchar的工作作爲PK
- 13. SQL更新與其中一個nvarchar的
- 14. 將數據類型varchar更改爲現有SQL Server 2005數據庫中的nvarchar。任何問題?
- 15. 將列從NVARCHAR更改爲NBINARY
- 16. 如何將每個nvarchar列更改爲varchar?
- 17. Tsql nvarchar日期更新
- 18. 將nvarchar轉換爲varchar
- 19. 如何從SQL Server數據庫獲取nvarchar數據
- 20. 將數據從nvarchar轉換爲C#中的varchar
- 21. 從SQL腳本在nvarchar或varchar中插入控制字符?
- 22. 更新尚未更新的庫
- 23. 在SQL服務器中將NULL從NVARCHAR列更改爲NOT NULL
- 24. SQL Server Nvarchar(max)
- 25. SQL服務器:爲nvarchar爲varchar
- 26. 將數據從舊SQL Server數據庫合併到新更新的SQL Server中
- 27. nvarchar&varchar與Oracle&SQLServer
- 28. Linq2Sql沒有更新NVarchar(Max)字段?
- 29. 更新尚未提取的遊標行中的數據sql server
- 30. 在SQL Server中使用NVARCHAR更新查詢(最大值)
這美麗的工作對我來說。偉大的小腳本! – DanM 2009-03-10 14:09:56