我想要做的是类似于这样的事情:
我还想对列进行TRIM操作,如果它们超过了一定的长度,那么就将该列的最大长度设置为另一个数据库中的最大值,除非最大列超过了500个字符等。如果超过了500个字符,那么该列就被截断到500个字符。
该命令成功运行,但实际上并未更改列的最大长度。有任何想法吗?
USE [database]
ALTER TABLE Client
ALTER COLUMN CLientNameShort NVARCHAR(SELECT MAX(LEN([database].dbo.Sites.Sitename))
我还想对列进行TRIM操作,如果它们超过了一定的长度,那么就将该列的最大长度设置为另一个数据库中的最大值,除非最大列超过了500个字符等。如果超过了500个字符,那么该列就被截断到500个字符。
这种操作是否可行?
谢谢!
编辑:
所以最终得到了这个:
CREATE PROCEDURE alterFieldSize
@column NVARCHAR(MAX), @table NVARCHAR(MAX)
AS
-- DECLARE VARIABLES
DECLARE @sql NVARCHAR(MAX)
DECLARE @fieldLen INT
DECLARE @columnLen INT
-- SET VARIABLES
SET @sql = 'ALTER TABLE Client ALTER COLUMN ' + @column + 'NVARCHAR('+cast(@fieldLen as varchar(20))+')'
SET @fieldLen = (SELECT MAX(LEN(s.Sitename))
FROM [database].dbo.Sites s)
SET @columnLen = (SELECT CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = @column AND TABLE_NAME = @table)
SET @fieldLen = CASE
WHEN @fieldLen < @columnLen
THEN @columnLen
WHEN @fieldLen <=500
THEN @fieldLen
ELSE 500
END
-- Execution
EXEC(@sql)
并且像这样调用过程:
EXEC alterFieldSize @column = 'ClientNameShort', @table = 'Client';
该命令成功运行,但实际上并未更改列的最大长度。有任何想法吗?