我正在编写一个 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”。
出于某种原因,SMO 没有在脚本中提供 GO 语句,我刚刚找到了一种解决此问题的方法,方法是在每个生成的脚本之后手动添加 GO 语句,如下所示:
>$mydb.Tables["my_table"].Script($opcionesscript)| out-file c:\Tables.txt –append; “GO” | out-file c:\Tables.txt -append }
令人沮丧的是,如果您直接将脚本写入文件,则 GO 语句会正确添加。
但如果您改为编写变量脚本则不会。
SMO 是一个令人惊叹的产品,但文档和实施都很差。 真是太可惜了