SqlClr 一次查詢多個DB

2021-08-09 03:17:00 字數 3090 閱讀 5088

一、c#**:

using system;

using system.data;

using system.data.sqlclient;

using system.data.sqltypes;

using microsoft.sqlserver.server;

using system.security.permissions;

using system.collections.generic;

public partial class storedprocedures

// mark the end of the result-set.

sqlcontext.pipe.sendresultsend();

}/// /// 一次查詢多個db

///

/// 連線串,多個以|分割

/// db的標識,多個以|分割

/// 要查詢的sql

[sqlprocedure]

public static void proc_dba_querymultidb(string connstrings, string flags, string sql)

;if (forbiddenwords.find(p => sql.tolower().indexof(p) != -1) != null)

string connstringarr = (connstrings ?? string.empty).split(new char , stringsplitoptions.removeemptyentries);

string flagarr =(flags ?? string.empty).split(new char , stringsplitoptions.removeemptyentries);

int i = 0;

sqldatarecord record = null;

listmetalist = new list();

bool builtstruct = false;

foreach (string connstring in connstringarr)

record = new sqldatarecord(metalist.toarray());

builtstruct = true;

sqlcontext.pipe.sendresultsstart(record);

}record.setstring(0, flag);

record.setstring(1, dbname);

for (int colidx = 0; colidx < sdr.fieldcount; colidx++)

catch (exception ex)

record.setstring(colidx+2, v);

}sqlcontext.pipe.sendresultsrow(record);}}

}//結束傳送

if (builtstruct)

}};

二、部署sql:

use master

go--1. 在sql server中啟用clr

exec sp_configure 'clr enabled', 1

goreconfigure with override;

go

--2. 在目標庫 [test] 設定trustworthy為on

alter database master set trustworthy on

go--sp_changedbowner 'sa',true

go--1. 刪除主程式集已有物件db

if object_id('[dbo].proc_dba_querymultidb') is not null

drop proc [dbo].proc_dba_querymultidb

go--2. 刪除主程式集已有物件db

if object_id('[dbo].storedprocreturnresultset') is not null

drop proc [dbo].storedprocreturnresultset

go--4. 刪除主程式集 studysqlclr

if exists(select * from sys.assemblies where name='studysqlclr')

drop assembly studysqlclr

go--3. 建立主程式集: studysqlclr

create assembly studysqlclr from 'd:\studysqlclr.dll' with permission_set = unsafe

gocreate proc [dbo].storedprocreturnresultset

as external name [studysqlclr].[storedprocedures].storedprocreturnresultset ;

goexec storedprocreturnresultset

gocreate proc [dbo].proc_dba_querymultidb

(@connstrings nvarchar(4000),

@flags nvarchar(4000),

@sql nvarchar(4000))as

external name [studysqlclr].[storedprocedures].proc_dba_querymultidb ;

goexec [dbo].proc_dba_querymultidbv1

@connstrings=n'data source=192.168.xx.xx,2014;initial catalog=master;user id=?;password=??;

|data source=192.168.xx.xx,2014;initial catalog=tempdb;user id=?;password=??;'

,@flags=n'廣東|廣西'

,@sql='select top 10 * from sys.tables'

一次新增多個帳戶

關於一次新增多個帳戶。dn,objectclass,samaccountname,userprincipalname,displayname,useraccountcontrol cn mary,ou market,dc sina,dc com user,mary,mary sina.com,mar...

MQTT一次訂閱多個主題

利用mqtt一次訂閱多個主題 在做智慧型家居相關的應用時候,需要利用訂閱所有裝置的主題。這個時候我們需要利用mqtt的萬用字元的功能,乙個訂閱可能包含特殊字元,允許你一次定義多個主題。主題層次分隔符被用來在主題中引入層次。多層的萬用字元和單層萬用字元可以被使用,但他們不能被使用來做發布者的訊息。1....

linux 一次執行多個命令

一次執行多個命令有多種寫法 1.命令之間用分號 隔開 順序執行各條命令,各命令的執行結果,不會影響其他命令的執行。即每個命令都會執行,但不保證每個命令都執行成功。2.命令之間用 隔開 若前面的命令執行成功,才會去執行後面的命令。4.命令之間用 隔開 是管道命令的界定符號,管道命令是將前乙個命令的輸出...