我想知道在创建表时是否可以执行PostgreSQL系统表上的触发器
我需要在我的数据库的每个表上添加2个函数,我想动态地执行它
谢谢
在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
类 - 这意味着使用加速器可以做一些其他的东西,而不仅仅是缩短代码.
我对这个问题的疑问是:
powershell pscustomobject psobject powershell-5.0 type-accelerators
当我从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图标
谢谢亚历杭德罗!
我想知道,如果有任何方法可以在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) 最近我偶然发现了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
我正在尝试跟踪用户创建.我在许多帖子中查看了DDL触发器,但这些似乎只是跟踪对象,而不是用户.有没有办法跟踪/记录在SQL Server中创建或删除用户的时间?
我希望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”开关可以为我完成工作:)。感谢您的回答。
我想做一些概念上简单的事情,但在现实中似乎要复杂得多.
基本上,每当为我们数据库中的几个用户创建一个新表时,我想授予一个角色的选择权限.基本上这个:
grant select on TABLENAME to READROLE;
到目前为止,我的触发器看起来像这样:
创建或替换触发器osmm_grant_on_creation
在OSMM.SCHEMA上创建之后
开始
Run Code Online (Sandbox Code Playgroud)//grant goes here
结束
问题是,我无法弄清楚如何通过获取新创建的表的名称并通过触发器将其引用到授权来将两者连接在一起.有什么建议?谢谢.
#Requires -Version 4 -Modules TestModule
当我在第一行运行一个带有语句的简单脚本时,出现错误:
脚本“TestScript.ps1”无法运行,因为缺少脚本的“#requires”语句指定的以下模块: TestModule CategoryInfo : ResourceUnavailable: (TestScript.ps1:String) [], ScriptRequiresException ExcellentQualifiedErrorId : ScriptRequiresMissingModules
一些有趣的事实:
#Requires -Version 4 -Modules TestModule
语句,但是当我运行脚本时#Requires
,两个模块都会加载,没有任何问题。PSModulePath
.Get-Module -ListAvailable
列出 TestModule 及其所有命令。Import-Module
第一次工作。$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)
我不知道发生了什么事。
SELECT *
FROM performance_table
WHERE ad_group like '%|%'
Run Code Online (Sandbox Code Playgroud)
我不知道如何在这里逃避管道运算符.
ddl-trigger ×3
powershell ×3
sql-server ×3
t-sql ×3
triggers ×3
c# ×1
clr ×1
datetime ×1
ddl ×1
excel-2010 ×1
oracle ×1
postgresql ×1
powerquery ×1
psobject ×1
sql ×1