Mic*_*lle 9 sql-server alter-table
我遇到的情况是我必须使用脚本将现有的数据库结构从varchar更新为nvarchar.由于每次运行配置应用程序时都会运行此脚本,因此我宁愿确定列是否已更改为nvarchar而不是对表执行alter.我必须支持的数据库是SQL Server 2000,2005和2008.
Jos*_*sef 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'
Run Code Online (Sandbox Code Playgroud)
但是,对你来说有几个快速的警告.
NVARCHAR为.VARCHAR> 4000,则需要将其修改为NVARCHAR(MAX)但是这些模板应该很容易实现.
如果您希望自动运行,可以在WHILE子句中设置它.
以下查询应该可以满足您的需求:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18506 次 |
| 最近记录: |