【发布时间】:2014-11-21 15:05:11
【问题描述】:
我正在尝试动态创建代码以将列定义更改为字段的最大长度。
注意数据库的内容不会改变。
这是我目前所拥有的,但我无法单独执行最大长度查询来获取数字。我哪里错了?
问候。
DECLARE @SQL_STMT VARCHAR(MAX) = ''
SELECT @SQL_STMT = @SQL_STMT
+ '''ALTER TABLE '
+ TABLE_NAME
+ ' ALTER COLUMN '
+ COLUMN_NAME
+ ' '
+ DATA_TYPE
+ '('' SELECT MAX(LEN('
+ COLUMN_NAME
+ ')) FROM '
+ TABLE_NAME
+ ''') ''
'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'varchar'
PRINT(@SQL_STMT)
【问题讨论】:
-
您想将 varchar 列更改为多长 ???这真的不清楚你到底想做什么??
-
最多为单个字段的最大长度。例如 select max(len(empname)) from emp
-
你到底为什么要这样做?这可能会削弱使用此数据库的应用程序。您可以开始截断数据错误,因为前端有验证。您不会从中获得任何好处,因为您只是在更改 varchar 列。更不用说您可能会出错,因为您使用的是不考虑尾随空格的 LEN。
-
在这种情况下,您应该使用DATALENGTH 而不是
LEN,因为正如@SeanLange 所提到的,LEN将排除尾随空格。
标签: sql-server dynamic-sql alter-column