如何在SQL查询中获取SQL表的数据类型长度(最大值)?

时间:2014-02-12 13:12:29

标签: sql sql-server-2008 tsql

我尝试通过SQL查询为我的表获取“脚本表作为创建查询”的结果。

就像右键单击table->脚本表一样 - >在SQL Management Studio上创建To->查询

我有这个问题:

                declare @vsSQL varchar(8000)
                declare @vsTableName varchar(50)
                select @vsTableName = 'dbo.TableName'
                select @vsSQL = 'CREATE TABLE ' + @vsTableName + char(10) + '(' + char(10)
                select @vsSQL = @vsSQL + ' ' + sc.Name + ' ' +
                st.Name +
                case when st.Name in 
               ('varchar','varchar','char','nchar','nvarchar') then '(' + 
                cast(sc.Length as varchar) + ') ' else ' ' end +
                case when sc.IsNullable = 1 then 'NULL' else 'NOT NULL' end + ',' + char(10)
                from sysobjects so
                join syscolumns sc on sc.id = so.id
                join systypes st on st.xusertype = sc.xusertype
                where so.name = @vsTableName
                order by
                sc.ColID
                select substring(@vsSQL,1,len(@vsSQL) - 2) + char(10) + ')

查询结果:

CREATE TABLE TableName (
                        Id int NOT NULL,  
                        Name nvarchar(-1) NULL,
                        Code int NULL,
                        Adress nvarchar (200) NOT NULL 
                        )

但我的查询不能采用nvarchar(max)。它显示nvarchar(-1)

如何将我的查询更改为:

Chage nvarchar(-1)到nvarchar(max)

CREATE TABLE TableName (
                        Id int NOT NULL,  
                        Name nvarchar(max) NULL,  
                        Code int NULL,
                        Adress nvarchar (200) NOT NULL
                        )

1 个答案:

答案 0 :(得分:2)

你在代码中有这一行:

cast(sc.Length as varchar)

将其更改为:

(case when sc.length < 0 then 'max' else cast(sc.Length as varchar(255)) end)

请注意,我还在varchar()添加了一个长度参数。 始终指定使用类型时的长度。当默认长度不足以满足您的需求时,找到问题非常困难。