VBS/ PowerShell 自动更新SQL SEVER Management Studio Query 模板

3 篇文章 0 订阅

2019-08-15 更新

添加一个用powershell 实现。 更改SQL Server Management Studio 18.0的query 模板

#
# Script1.ps1
# C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\SqlWorkbenchProjectItems\Sql
#
$date= "{0:yyyy-MM-dd}" -f (get-date)
$uri = "https://dict.youdao.com/infoline/web?mode=publish&client=web&keyfrom=dict2.index&startDate={0}" -f $date
Write-Host "Call $uri"
$header = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$header.Add("Accept", "application/json")
$response = Invoke-WebRequest -Method Get -Uri $uri -header $header
# Check response status code
#stopScript -statusCode $response.StatusCode -message "Cannot list $resourceType."
#$responseContent = $($response.Content | ConvertFrom-Json).Value
$responseContent = $response.Content | ConvertFrom-Json
$dateData=$responseContent.$date
foreach($dataset in $dateData){
	$type=$dataset.type
	if($type -eq '壹句'){
		$oneLineSource=$dataset.source
		$oneLineSummary=$dataset.summary
		$oneLineTitle=$dataset.title
		$oneLine=""
		$oneLine=$oneLine+"-----------------------------------------------`n"
		$oneLine=$oneLine+"--Source: $oneLineSource`n"
		$oneLine=$oneLine+"--CN: $oneLineSummary`n"
		$oneLine=$oneLine+"--EN: $oneLineTitle`n"
		$oneLine=$oneLine+"-----------------------------------------------`n"
	} 
} 
Write-Host "$oneLine"
$page="{0:D}" -f (Get-Date).DayofYear
$uri = "http://www.iwmgh.com/api/call_db.php?cmd=getZhuji&page={0}&type=most&db_name=MnemonicDb&fun_name=UserRequestEntry&r=0.51078588689454544" -f $page
Write-Host "Call $uri"
$header = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$header.Add("Accept", "application/json")
$response = Invoke-WebRequest -Method Get -Uri $uri -header $header
# Check response status code
#stopScript -statusCode $response.StatusCode -message "Cannot list $resourceType."
#$responseContent = $($response.Content | ConvertFrom-Json).Value

$oneLine=$oneLine+"-----------------------------------------------`n"

$responseContent = $response.Content | ConvertFrom-Json
$dateData=$responseContent[1]
foreach($dataset in $dateData){
$oneLineWord=$dataset[1]
$oneLineTranslation=$dataset[2]
$oneLine=$oneLine+"--EN: $oneLineWord`n"
$oneLine=$oneLine+"--CN: $oneLineTranslation`n"
$oneLine=$oneLine+"-----------------------------------------------`n"
} 
Write-Host "$oneLine"


$file="C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\SqlWorkbenchProjectItems\Sql\SQLFile.sql"
$fileTemp="XXXXX\SqlTemplate.sql" #预定义模板文件地址
#$fileContent=get-content -Path $fileTemp -Encoding UTF8 | select -Skip 5 | %{$PSItem+"`n"}
$fileContent=get-content -Path $fileTemp -Encoding UTF8 | select | %{$PSItem+"`n"}
#Write-Host "$fileContent"
$oneLine+$fileContent | set-content "$file"

将以上代码保存为一ps1 文件,更改 #预定义模板文件地址,然后在Task Scheduler中设置一个日常任务。然后每天就可以看到不同的一句。

最终效果

-----------------------------------------------
--Source: 
--CN: 唱歌本就该唱出你自己的个性。
--EN: You're supposed to sing like you.
-----------------------------------------------
-----------------------------------------------
--EN: kettle
--CN: _ttle 串烧助记:瓶子(bottle)易碎(brittle)因战斗(battle),小壶(kettle)虽小(little)安顿(settle)牲口(cattle)
-----------------------------------------------
--EN: commemorate
--CN: com-com表示"共同"。commemorate纪念(com+memor记住+ate→大家一起记住→纪念)
-----------------------------------------------
--EN: chain
--CN: cha 插 in 在里面
-----------------------------------------------
--EN: mutton
--CN: cotton棉 mutton绵羊
-----------------------------------------------
--EN: confront
--CN: front=forehead表示"前额"。confront v 面临,对抗(con 互相,共同+front→互相面对→对抗)
-----------------------------------------------

 --C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\SqlWorkbenchProjectItems\Sql
 
    
    
  --以下是预定义模板内容 
 select DbRole = g.name, MemberName = u.name, MemberSID = u.sid  
 from sys.database_principals u, sys.database_principals g, sys.database_role_members m  
 where g.principal_id = m.role_principal_id  
 and u.principal_id = m.member_principal_id  
 and u.name like '%'
 order by 1, 2  
    
    


------------------------------------------------------------------------------------------------------------------------------------------------

好久没动手了。

哈哈, 好像要干架的感觉。

开始写。

当我们在SSMS中点击New Query 时,SSMS会打开一个查询窗口。而这个窗口中的内容我们可以通过模板文件进行预设置。

 

模板文件在以下路径中,不同的SQL SERVER版本路径也会有所不同,我得是2014,  路径如下。

C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql\SQLFile.sql

 

如果你得是其他版本,可以试试以下路径,其中的100 对应SQL SERVER 2008,如果你是SQL SERVER 2012 那应是 110.

C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\SqlWorkbenchProjectItems\Sql\SQLFile.sql

 

如果我们更改SQLFile.sql中的内容,再点击New Query时,窗口中的内容就会更新。更改的过程可能会提示,要权限。由于这个文件目录是不允许修改的,所以我先删了SQLFile.sql这个文件,然后将新的SQLFile.sql放入这个文件夹。 后面我做的时候,我预先修改了这个文件夹的访问权限,改为了Full Control。

 

好了 说说我想干嘛,由于每天我会点击上百次New Query,所以我准备将爱词霸的每日一句放入这个模板文件,这样每天无形中我可以学习一句英文。

 

OK,talk is cheap,show me the code!

 

Sub CalendarPhrases()
    Dim iLocalfile, iRemote, i, j,ibackupFile
    Dim xPost, sGet,strContents


    'URL from website iciba, it can be different when you see this article
    url = "http://news.iciba.com/dailysentence/detail-"+cstr(1421+DateDiff("d", "2015-08-12", Now())*2)+".html?from=calendar"
    'add the calendar phrase as a comment in the SQLFile.sql
    'I use the regular expression to get the content.
    result = "/* "+cstr(now())+ VbCrlf
    result = result+ VbCrlf +RegMatchValue(GetTextFromURL(url), "<li class=""en""><a>[^>]*(?=</a><span)")
    result = Replace(result, "<li class=""en""><a>", "")
    result = result + VbCrlf +VbCrlf + RegMatchValue(GetTextFromURL(url), "<li class=""cn""><a>[^>]*(?=</a></li>)")+ VbCrlf +"*/"+vbCrLf+vbCrLf
    result = Replace(result, "<li class=""cn""><a>", "")
    'MsgBox result




    Dim File, FileObject
    'below file path can be different for different vesion of SQL SERVER
    iLocalfile = "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\SqlWorkbenchProjectItems\Sql\SQLFile.sql"
    ibackupFile = "C:\Temp\"
    Set FileObject = CreateObject("scripting.FileSystemObject")
    'before I change the template sql, I back up it into a folder Temp.
    If FileObject.FileExists(iLocalfile) Then 
        FileObject.CopyFile iLocalfile,ibackupFile
    End If 




    Const ForReading = 1
    Set File = FileObject.OpenTextFile(iLocalfile, ForReading)
    'ignore first 7 lines,which will be used to put the calendar phrases
    For i = 1 To 7
        File.ReadLine
    Next


    Do Until File.AtEndOfStream
        strContents = strContents + vbCrLf + File.ReadLine
        
    Loop
    File.Close


    result = result + vbCrLf + strContents
    'MsgBox result




    'write it to the file, as I also keep the translation, so I use ADODB.Steam.
    Set sGet = CreateObject("ADODB.Stream")
    sGet.Mode = 3
    sGet.Type = 2
    sGet.Charset = "utf-8"
    sGet.Open
    sGet.WriteText result
    sGet.SaveToFile iLocalfile, 2
    sGet.flush
    sGet.Close
    Set sGet = Nothing




End Sub
'=================================================================================================
' ¸get the web text from url.
'=================================================================================================
Function GetTextFromURL(url)
    Dim Retrieval
    On Error Resume Next
    Set Retrieval = CreateObject("Microsoft.XMLHTTP")
    
    Retrieval.Open "GET", url, False, "", ""
    Retrieval.send
    
    GetTextFromURL = Retrieval.responsetext


    If Err.Number <> 0 Then
        'msgbox "There is some error1:"& err.number&"-"&err.Description
        Set Retrieval = Nothing
        Exit Function
    Else
        'msgbox "Successfully GetURL!"
    End If
End Function
'=================================================================================================
' ¸Get the information what we need.
'=================================================================================================
Function RegMatchValue(SourceString, PatternStr)
    Dim Reg, Match, Matches, RetStr
    Set Reg = New RegExp
    'Set Reg = CreateObject("vbscript.regexp")
    Reg.IgnoreCase = True
    Reg.Global = True
    Reg.MultiLine = False
    Reg.Pattern = PatternStr
    Set Matches = Reg.Execute(SourceString)
    For Each Match In Matches
        RetStr = RetStr & Match.Value
    Next
    RegMatchValue = RetStr
End Function




call  CalendarPhrases

将以上代码保存为一个vbs 文件,然后在Task Scheduler中设置一个日常任务。然后每天就可以看到不同的一句。

下面是我得到的。

 

/* 2015/8/12 12:11:49

If you want to achieve a high goal, you're going to have to take some chances.

 如果你想达到一个更高目标,你必须得冒点险。(阿尔贝托·萨拉查)
*/



SELECT Create_date,* FROM SYS.OBJECTS WHERE TYPE='P' AND NAME LIKE '%%'

SELECT OBJECT_NAME(SM.OBJECT_ID),DEFINITION FROM SYS.SQL_MODULES  SM
JOIN SYS.OBJECTS SO
ON SO.OBJECT_ID=SM.OBJECT_ID
WHERE SO.TYPE='P' AND DEFINITION LIKE ''

 

 

 

 

 

Good Luck

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值