【问题标题】:Can I change the format of DATA scripted when scripting using SMO?我可以在使用 SMO 编写脚本时更改 DATA 脚本的格式吗?
【发布时间】:2009-12-22 21:14:05
【问题描述】:

我想使用 SMO 生成一组插入语句来在环境之间复制数据。我有这个工作,但由于某种原因,日期时间字段被格式化为转换为日期时间的十六进制值。这使得脚本难以阅读并且无法更新。有没有办法让我改变它以使用日期的字符串表示?

用于生成的代码:

scripter = New Scripter(<server>)
scripter.Options.ScriptData = True
...
For Each s As String In scripter.EnumScript(list)
    writer.WriteLine(FormatScript(s))
Next

我想改变这个...

INSERT [dbo].[dmMessages] ([MessageId], [MessageCd], [MessageDesc], [Status], [EnteredBy], [EnteredDt])
VALUES (1, N'GenericMessages.FieldRequired', N'The {0} field is required.', 1, N'System', CAST(0x00009B4900000000 AS DateTime))

INSERT [dbo].[dmMessages] ([MessageId], [MessageCd], [MessageDesc], [Status], [EnteredBy], [EnteredDt])
VALUES (1, N'GenericMessages.FieldRequired', N'The {0} field is required.', 1, N'System', '2009-1-1 13:00:00:000')

【问题讨论】:

  • 您找到问题的答案了吗?事实上,我遇到了一个案例,SMO 会将 DateTime 字段编写为字符串(如CAST(N'2014-07-22 15:24:32.873' AS DateTime)),我需要它是二进制的..
  • @Andreas:我没有答案。如果您可以提供您在 SMO 对象上的设置来获得您的输出,那就太好了。我默认得到二进制输出。您使用的是什么版本的 SMO?我的 Microsoft.SqlServer.Smo.dll 版本是 10.0.2531.0。
  • 问题是,我没有系统地得到字符串输出。只有十分之一的用户得到了这个字符串输出(都使用我的工具的相同版本);确实很奇怪。备案:我的 Smo.dll 版本是 11.0.2100.60。我使用带有选项ScriptData=TrueScriptSchema=FalseToFileOnly=TrueFileName="..."Encoding=New Text.UTF8Encoding(True) 的脚本对象。

标签: sql-server smo


【解决方案1】:

获得所需结果的一种迂回方法是使用 BCP 导出数据并使用批量插入导入数据,而不是让 SMO 编写数据脚本。阅读here了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2013-03-21
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多