小编Ada*_*ski的帖子

在创建表时执行触发器

我想知道在创建表时是否可以执行PostgreSQL系统表上的触发器

我需要在我的数据库的每个表上添加2个函数,我想动态地执行它

谢谢

postgresql triggers ddl-trigger

15
推荐指数
3
解决办法
4913
查看次数

PowerShell类型加速器:PSObject vs PSCustomObject

在PowerShell v3.0 PSCustomObject中引入了.就像PSObject,但更好.在其他改进中(例如保留属性顺序),简化了从哈希表创建对象:

[PSCustomObject]@{one=1; two=2;}
Run Code Online (Sandbox Code Playgroud)

现在看来这句话很明显:

[System.Management.Automation.PSCustomObject]@{one=1; two=2;}
Run Code Online (Sandbox Code Playgroud)

将以相同的方式工作,因为它PSCustomObject是完整命名空间+类名的"别名".相反,我得到一个错误:

无法将类型"System.Collections.Hashtable"的"System.Collections.Hashtable"价值型"System.Management.Automation.PSCustomObject".

我列出了两种类型对象的加速器:

[accelerators]::get.GetEnumerator() | where key -Like ps*object

    Key            Value
    ---            -----
    psobject       System.Management.Automation.PSObject
    pscustomobject System.Management.Automation.PSObject
Run Code Online (Sandbox Code Playgroud)

并发现它们都引用了同一个PSObject类 - 这意味着使用加速器可以做一些其他的东西,而不仅仅是缩短代码.

我对这个问题的疑问是:

  1. 在使用加速器和使用完整类型名称之间,您是否有一些有趣的差异?
  2. 如果加速器可用作一般最佳实践,是否应避免使用完整类型名称?
  3. 如果加速器做其他东西而不仅仅指向底层类,如何检查,也许使用反射?

powershell pscustomobject psobject powershell-5.0 type-accelerators

13
推荐指数
1
解决办法
5457
查看次数

在Power Query中编辑SQL

当我从Power Query中的Sql Server导入数据时,我可以粘贴一个要对数据库执行的查询.但是后来当我想在工作簿查询>编辑>高级编辑器中编辑此查询时,我得到这样的结果:

let
    Source = Sql.Database("server", "database", [Query="select#(lf)#(tab)*#(lf)from dbo.SomeView va#(lf)join dbo.SomeTable rm#(lf)#(tab)on rm.CatId=va.CatId#(lf)where 1=1#(lf)#(tab)and Month between 1501 and 1510#(lf)#(tab)and rm.Id in (1,2,3)"])
in
    Source
Run Code Online (Sandbox Code Playgroud)

请注意我正在使用*,但使用明确的列名称,这看起来会更糟.

我希望能够以可读的形式查看查询,然后复制它,在Management Studio中执行,更改内容并粘贴回Power Query.我知道我可以使用视图作为源,或者不使用换行符和缩进,但这不是我的观点.

有关如何以"正常"形式编辑SQL的任何想法?或者也许我错过了一些隐藏的选项.

编辑:如果我不是世界上唯一一个在找到这个选项时遇到问题的人,那就是:

Power Query> Launch Editor> View> Query Settings> Applied Steps> Source> Gear图标

谢谢亚历杭德罗!

excel-2010 powerquery

10
推荐指数
2
解决办法
1万
查看次数

sql server CLR标量函数,默认列名

我想知道,如果有任何方法可以在Sql Server中为我的CLR标量函数添加列名.我的意思是,在我运行查询之后,我希望看到一个带有此函数结果的列已经用自定义而不是自定义命名(No column name).

我知道通常将函数组合在一起,或者由于其他原因我必须将它们命名为不同的东西,但仍然 - 当您编写一个包含30列的查询时,不必为其中的20列打入别名就不错了.

那么有人知道一个能够实现此目的的黑客攻击吗?

通过SSMS中的一些插件来获得此功能也很好(例如,从计算中使用的函数和列构建虚拟别名,例如"datediff_startdate_enddate").我试图找到一个现成的解决方案,但没有效果.任何提示?

编辑:有人问我关于代码示例.我不认为这会有多大帮助,但这里是:

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.SqlTypes;
using System.Text.RegularExpressions;

namespace ClrFunctions
{
    public class RegexFunctions
    {

        public static SqlBoolean clrIsMatch(SqlString strInput, SqlString strPattern)
        {
            if (strPattern.IsNull || strInput.IsNull)
            {
                return SqlBoolean.False;
            }
            return (SqlBoolean)Regex.IsMatch(strInput.Value, strPattern.Value, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

T-SQL:

Create Assembly ClrFunctions From 'C:\CLR\ClrFunctions.dll' 
GO

Create Function dbo.clrIsMatch(
    @strInput As nvarchar(4000),
    @strPattern As nvarchar(255)
)
Returns Bit
As External Name [ClrFunctions].[ClrFunctions.RegexFunctions].[clrIsMatch] …
Run Code Online (Sandbox Code Playgroud)

c# t-sql clr user-defined-functions sql-server-2008

7
推荐指数
1
解决办法
2414
查看次数

未记录的CONVERT样式 - 日期时间23

最近我偶然发现了CONVERT功能样式23,它非常方便,因为它给你DATE格式yyyy-mm-dd.问题是它没有在msdn中记录!(在CONVERT上的F1之后从SSMS帮助链接:http://msdn.microsoft.com/en-us/library/ms187928%28SQL.105%29.aspx).例:

select convert( date ,'2012-01-30', 23)
select convert(varchar(255), getdate(), 23)
Run Code Online (Sandbox Code Playgroud)

这种风格非常有用,我一直在想它,但我担心的是: - 使用它是否安全?它是否被弃用或潜入错误,可能会在将来的版本/更新中删除? - 有人知道其他隐藏的风格吗?

t-sql sql-server datetime string-formatting sql-server-2008-r2

4
推荐指数
1
解决办法
5382
查看次数

SQL Server跟踪DDL CREATE USER

我正在尝试跟踪用户创建.我在许多帖子中查看了DDL触发器,但这些似乎只是跟踪对象,而不是用户.有没有办法跟踪/记录在SQL Server中创建或删除用户的时间?

sql-server ddl triggers ddl-trigger

4
推荐指数
1
解决办法
1750
查看次数

选择不存在的属性时没有错误

我希望PowerShell在尝试选择不存在的属性时抛出错误,但是我得到了空列作为输出。例:

$ErrorActionPreference=[System.Management.Automation.ActionPreference]::Stop;
Set-StrictMode -Version 'Latest'
Get-Process *ex* | Select-Object Id,ProcessName,xxx

   Id ProcessName   xxx
   -- -----------   ---
 9084 explorer
11404 procexp
Run Code Online (Sandbox Code Playgroud)

我编写了一个脚本,该脚本通过导入了多个文本文件Import-Csv,但是这些文件中的标题可能会更改,最后我将空列加载到系统中。

编辑:这就是我检查标题是否匹配的方式:

$csv = Import-Csv -Delimiter ';' -Path $file.FullName 
$FileHeaders = @(($csv | Get-Member -MemberType NoteProperty).Name) 
if (Compare-Object $ProperHeaders $FileHeaders) {'err'} else {'ok'}
Run Code Online (Sandbox Code Playgroud)

我知道这就是PowerShell的工作方式,但是Set-StrictMode正如@Matt所提到的,文档确实对我有点误导。我只希望Select-Object有某种“ -NoNewImplicitProps”或“ -ReadOnlyPipeline”开关可以为我完成工作:)。感谢您的回答。

powershell powershell-4.0 select-object

3
推荐指数
1
解决办法
1168
查看次数

如何创建授予权限的Oracle触发器

我想做一些概念上简单的事情,但在现实中似乎要复杂得多.

基本上,每当为我们数据库中的几个用户创建一个新表时,我想授予一个角色的选择权限.基本上这个:

grant select on TABLENAME to READROLE;

到目前为止,我的触发器看起来像这样:

创建或替换触发器osmm_grant_on_creation

在OSMM.SCHEMA上创建之后

开始

    //grant goes here
Run Code Online (Sandbox Code Playgroud)

结束

问题是,我无法弄清楚如何通过获取新创建的表的名称并通过触发器将其引用到授权来将两者连接在一起.有什么建议?谢谢.

oracle triggers ddl-trigger

1
推荐指数
1
解决办法
1万
查看次数

#Requires 看不到模块,Import-Module 有效

#Requires -Version 4 -Modules TestModule当我在第一行运行一个带有语句的简单脚本时,出现错误:

脚本“TestScript.ps1”无法运行,因为缺少脚本的“#requires”语句指定的以下模块: TestModule CategoryInfo : ResourceUnavailable: (TestScript.ps1:String) [], ScriptRequiresException ExcellentQualifiedErrorId : ScriptRequiresMissingModules

一些有趣的事实:

  1. 我第二次运行此脚本(同一会话)时,模块已加载并且一切正常。
  2. 脚本目录位于网络共享上,但其他 7 个模块加载没有任何问题(模块类型为清单、脚本和二进制 - 它们都可以工作)。
  3. 其中一个模块也有#Requires -Version 4 -Modules TestModule语句,但是当我运行脚本时#Requires,两个模块都会加载,没有任何问题。
  4. 路径显然被添加到PSModulePath.
  5. 在运行脚本之前,Get-Module -ListAvailable列出 TestModule 及其所有命令。
  6. Import-Module第一次工作。
  7. 计算机上可能缺少某些内容:登录该计算机的任何人都遇到同样的问题。

$PSVersionTable:

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18444
BuildVersion                   6.3.9600.16406
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么事。

powershell powershell-module powershell-4.0

1
推荐指数
1
解决办法
7463
查看次数

如何逃避'|' 在SQL Server或T-SQL查询?

SELECT * 
FROM performance_table
WHERE ad_group like '%|%'
Run Code Online (Sandbox Code Playgroud)

我不知道如何在这里逃避管道运算符.

sql t-sql sql-server

1
推荐指数
1
解决办法
343
查看次数