sql-server - 为什么 SQL SMO 不返回我的 View ?

标签 sql-server sql-server-2008 powershell powershell-2.0 smo

我在架构 bar 中有一个名为 foo 的 View ,我想检索对其的引用。为什么?因为我要更改脚本中的 TextBody 属性。

我正在尝试使用 SMO 检索对 View 的引用。到目前为止我已经尝试了两种不同的方法;一种方法返回 View 的空值,另一种方法给出一些奇怪的错误消息。

示例 1(实例化 View )

该对象上的所有值都是 null,所以我猜实例化一个 View 对象只是为了创建一个新的 View。

$ViewTest = New-Object -TypeName Microsoft.SqlServer.Management.Smo.View -ArgumentList $ServerSmo.Databases["dbname"], 'foo', 'bar';

(请注意,$ServerSmo 是一个 Smo.Server 对象)

示例 2(索引器表示法)

应该有效。基于 ViewCollection 的项目索引器:MSDN Link

$ViewTest = $ServerSmo.Databases["dbname"].Views['foo', 'bar'];

这个例子给了我一些奇怪的错误消息。它返回一条消息:要完成此操作,请设置属性 AnsiNullsStatus。 如果我将 AnsiNullsStatus 属性设置为 $true,那么我会得到以下信息message: 要完成此操作,请设置属性 BodyStartIndex。 View 甚至没有名为该属性的属性。

现在,我还有两个有效的示例:

示例 3(Item() 索引器方法)

将索引器作为方法调用而不是使用索引器表示法似乎工作得很好。

$ViewTest = $ServerSmo.Databases["dbname"].Views.Item('foo', 'bar');

示例 4(Where-对象)

枚举 PowerShell 管道的所有 View 对象,然后使用Where-Object cmdlet 进行过滤似乎工作得很好,但效率低下且丑陋。

$ViewTest = $ServerSmo.Databases["dbname"].Views | Where-Object -FilterScript { $_.Name -eq 'foo' and $_.Schema -eq 'bar' };

所以写完所有这些之后,我想我的问题或多或少可以归结为:为什么索引器符号不能像示例#2 中那样工作?

更新:我编写了一些 C# 代码,它似乎可以很好地检索 View 。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            var server = new Server(".");
            var db = server.Databases["dbname"];
            var view = db.Views["foo", "bar"];
        }
    }
}

最佳答案

示例 #2 对我有用(在 v3 中),我可以使用以下命令更改 View TextBody:

$ViewTest = $ServerSmo.Databases['dbname'].Views['foo','bar']
$ViewTest.TextBody='foo'
$ViewTest.Alter()

在 v2 中 $ViewTest 是 System.Object[] 的集合,因此我必须对其进行索引以设置 bosy 并调用警报方法

$ViewTest = $ServerSmo.Databases['dbname'].Views['foo','bar']
$ViewTest[0].TextBody='foo'
$ViewTest[0].Alter()

关于sql-server - 为什么 SQL SMO 不返回我的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263165/

相关文章:

PowerShell 术语 'which' 未被识别为 cmdlet 函数脚本文件或可操作程序

sql-server - FxCop for SQL Server - 分析 SQL Server 数据库潜在问题的工具

SQL Server 自动去除尾随空格

php - 根据特定条件使用 php 回显图像

c# - SqlCommand SQL 语句被执行两次

git - 从 powershell 启动非阻塞进程

sql-server - 如何通过 IIS 启动 SQL Server LocalDB

sql-server - 表架构更新后错误的列值 SQL Server View

c# - 将标量从 SQL Server 返回到 C#

azure - 列出嵌套 Azure AD 组的成员