【发布时间】:2017-05-12 06:21:28
【问题描述】:
我想做的是这样的:
USE [database]
ALTER TABLE Client
ALTER COLUMN CLientNameShort NVARCHAR(SELECT MAX(LEN([database].dbo.Sites.Sitename))
如果列超过一定长度,我也想修剪列,所以它会将列的最大长度设置为另一个数据库中的最大值,除非最大列超过 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';
命令运行成功,但实际上并没有改变列的最大长度。
有什么想法吗?
【问题讨论】:
-
其他数据库中的最大值你是指其他数据库中记录的最大值还是列的数据类型大小
-
通过最大值我是指另一个数据库中的最大值,数据将被插入到我想要更改字段长度的数据库中,因此我想更改每个的长度场地。问题是一些字段的长度为 8000 个字符,因为人们决定将某人的生活故事放入地址字段中。因此,如果它们超过最大字段限制(很可能是 500),我想修剪它们。
标签: sql sql-server tsql