我尝试通过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
)
答案 0 :(得分:2)
你在代码中有这一行:
cast(sc.Length as varchar)
将其更改为:
(case when sc.length < 0 then 'max' else cast(sc.Length as varchar(255)) end)
请注意,我还在varchar()
添加了一个长度参数。 始终指定使用类型时的长度。当默认长度不足以满足您的需求时,找到问题非常困难。