0

当我右键单击我的视图并单击“脚本视图为”时,我收到以下错误:

属性 TextHeader 不适用于视图“[dbo].[TableName]”。此对象的此属性可能不存在,或者由于访问权限不足而无法检索。文本已加密。(Microsoft.SqlServer.Smo)

我可以用来bcp获取表的转储,还可以创建此处给出的格式文件。该表有大约 60 列,我不想手动编写CREATE TABLE查询。有没有办法自动做到这一点?

我希望那

BULK INSERT DB.dbo.TableName
FROM 'E:\Databases\TableName'
WITH (FORMATFILE = 'E:\Databases\TableName.Fmt');
GO

会做到这一点,但看起来表本身应该存在于数据库中,然后我才能执行上述查询。有什么建议么?

4

1 回答 1

2

您可以从 INFORMATION_SCHEMA.Columns 构造创建表语句。就像是:

select (column_name + ' ' + data_type +
        (case when character_maximum_length is not null
              then '('+character_maximum_length+')'
              else ''
         end) + ','
       ) as ColumnDef
from Information_Schema.columns
order by ordinal_position

这可能已经足够好了。例如,如果您必须处理数字,或者希望“is null”准确,则可以使其更复杂。

将结果复制到新窗口中,添加 create table 语句,删除最后的逗号并添加最后的结束括号。

您可以在更复杂的 SQL 语句中完成所有最后一步,但一次性完成更容易手动完成。

于 2012-08-10T01:01:32.273 回答