如何在ironpython中为Microsoft.SqlServer.SMO.Scripter.Script类定义参数
我想使用下面的ironpython代码为我的数据库对象编写脚本:如何在ironpython中为Microsoft.SqlServer.SMO.Scripter.Script类定义参数,python,sql-server,ironpython,smo,Python,Sql Server,Ironpython,Smo,我想使用下面的ironpython代码为我的数据库对象编写脚本: import sys import clr database_name = r'localhost\SQLEXPRESS' dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies' # Import SMO Namespace sys.path.append(dir_assemblies) clr.AddReferenceToFil
import sys
import clr
database_name = r'localhost\SQLEXPRESS'
dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies'
# Import SMO Namespace
sys.path.append(dir_assemblies)
clr.AddReferenceToFile('Microsoft.SqlServer.Smo.dll')
import Microsoft.SqlServer.Management.Smo as SMO
db = SMO.Server(database_name)
scripter = SMO.Scripter(db)
for database in db.Databases:
for table in database.Tables:
# TypeError: expected Array[Urn], got Table
scripter.Script(table)
执行此代码时,我得到以下错误:
File "SMOtest2.py", line 18, in <module>
TypeError: expected Array[Urn], got Table
我尝试创建数组[Urn]或数组[SqlSmoObject],但没有成功
有人知道如何为SMO.Scripter.Script类创建正确的参数吗
我想用python编写下面的VB代码。
摘自:
从未使用过IronPython或SMO,但它似乎需要某种集合。您是否尝试过:
scripter.Script(database.Tables)
不是一次编写一个表的脚本?从未使用IronPython或SMO,但它似乎需要某种类型的集合。您是否尝试过:
scripter.Script(database.Tables)
不是一次编写一个表的脚本?我找到了解决方案:
arg=System.Array[SMO.SqlSmoObject]([table])
完整的脚本如下所示:
import sys
import clr
# import .NET Array
import System.Array
database_name = r'localhost\SQLEXPRESS'
dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies'
# Import SMO Namespace
sys.path.append(dir_assemblies)
clr.AddReferenceToFile('Microsoft.SqlServer.Smo.dll')
import Microsoft.SqlServer.Management.Smo as SMO
db = SMO.Server(database_name)
scripter = SMO.Scripter(db)
for database in db.Databases:
for table in database.Tables:
# create a .NET Array as an argument for the scripter
arg=System.Array[SMO.SqlSmoObject]([table])
script = scripter.Script(arg)
#output script
for line in script:
print line
我找到了解决办法:
arg=System.Array[SMO.SqlSmoObject]([table])
完整的脚本如下所示:
import sys
import clr
# import .NET Array
import System.Array
database_name = r'localhost\SQLEXPRESS'
dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies'
# Import SMO Namespace
sys.path.append(dir_assemblies)
clr.AddReferenceToFile('Microsoft.SqlServer.Smo.dll')
import Microsoft.SqlServer.Management.Smo as SMO
db = SMO.Server(database_name)
scripter = SMO.Scripter(db)
for database in db.Databases:
for table in database.Tables:
# create a .NET Array as an argument for the scripter
arg=System.Array[SMO.SqlSmoObject]([table])
script = scripter.Script(arg)
#output script
for line in script:
print line
谢谢你的回复。我试过你的建议,但不幸没有成功。(参见下面的答案)我希望调用重载接受
数组[SqlSmoObject]
。可能先尝试将表格集合
转换为数组[表格]
。谢谢您的回复。我试过你的建议,但不幸没有成功。(参见下面的答案)我希望调用重载接受数组[SqlSmoObject]
。可能先尝试将表格集合
转换为数组[表格]
。