如何获取“CREATE TABLE”查询?

时间:2012-08-10 00:44:58

标签: sql sql-server-2008 bcp

当我右键单击我的视图并单击“Script View As”时,我收到以下错误:

  

属性TextHeader不适用于View'[dbo]。[TableName]'。这个   此对象可能不存在属性,或者可能无法检索到该属性   访问权限不足。文本已加密。   (Microsoft.SqlServer.Smo)

我能够使用bcp来获取表的转储,并且还创建了一个给定here的格式文件。该表有大约60列,我不想手动编写CREATE TABLE查询。有没有办法自动执行此操作?

我希望

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

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

1 个答案:

答案 0 :(得分:2)

您可以从INFORMATION_SCHEMA.Columns构造create table语句。类似的东西:

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

这可能已经足够了。例如,如果你必须处理数字,或者想要“无效”,那么你可以使它更复杂。

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

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