SMO ScriptBatchTerminator 属性不起作用?

问题描述 投票:0回答:2

我正在编写一个 powershell 脚本来获取表的创建脚本并将其保存到 .sql 文件中。

借助脚本选项(SMO 的一部分),我可以选择应包含脚本的哪些部分,例如外部索引、约束等。

$opcionesscript = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions
$opcionesscript.DriAll = $true

但是,当设置为 true 时,引用“GO”语句的属性“ScriptBatchTerminator”不起作用

$opcionesscript.ScriptBatchTerminator = $true

这个相同的结果是真还是假:

$mydb.Tables["CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS"].Script($opcionesscript)


SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS](
    [IDRELACION] [int] IDENTITY(1,1) NOT NULL,
    [IDLOCALIDAD] [int] NOT NULL,
    [COD_ART] [nvarchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [FECHA] [datetime] NOT NULL,
 CONSTRAINT [PK_CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS] PRIMARY KEY CLUSTERED 
(
    [IDRELACION] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GRANT SELECT ON [dbo].[CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS] TO [someuser] AS [dbo]
ALTER TABLE [dbo].[CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS]  WITH CHECK ADD  CONSTRAINT [FK_CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS_CAT_LOCALIDADES_INVENTARIO] FOREIGN KEY([IDLOCALIDAD])
REFERENCES [dbo].[CAT_LOCALIDADES_INVENTARIO] ([IDLOCALIDAD])
ALTER TABLE [dbo].[CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS] CHECK CONSTRAINT [FK_CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS_CAT_LOCALIDADES_INVENTARIO]
ALTER TABLE [dbo].[CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS]  WITH CHECK ADD  CONSTRAINT [FK_CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS_CATARTI] FOREIGN KEY([COD_ART])
REFERENCES [dbo].[CATARTI] ([COD_ART])
ALTER TABLE [dbo].[CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS] CHECK CONSTRAINT [FK_CAT_LOCALIDADES_INVENTARIOS_RELACION_ARTICULOS_CATARTI]

为什么不包括“GO”语句?有错误还是我遗漏了什么? 我正在创建一个批处理 .sql 文件以包含那些使用外键创建表的文件,因此需要那些“GO”。

sql-server powershell smo
2个回答
0
投票

出于某种原因,SMO 没有在脚本中提供 GO 语句,我刚刚找到了一种解决此问题的方法,方法是在每个生成的脚本之后手动添加 GO 语句,如下所示:

>$mydb.Tables["my_table"].Script($opcionesscript)| out-file c:\Tables.txt –append; “GO” | out-file c:\Tables.txt -append }

0
投票

令人沮丧的是,如果您直接将脚本写入文件,则 GO 语句会正确添加。

但如果您改为编写变量脚本则不会。

SMO 是一个令人惊叹的产品,但文档和实施都很差。 真是太可惜了

© www.soinside.com 2019 - 2024. All rights reserved.