您现在的位置是:网站首页> 数据库
SQLServer技术收集
- 数据库
- 2025-09-07
- 719人已阅读
SQLServer技术收集
SQL Server存储过程模拟HTTP请求POST和GET协议
解决SQL Server发布订阅时需要有实际的服务器名称才能连接到服务器的问题
数据库中的11种查询用法
一.简单查询
简单查询是最基本的查询类型,用于从数据库中选择特定列或所有列的数据。
SELECT 列名1, 列名2 FROM 表名;
二.条件查询
条件查询是使用WHERE子句来筛选满足特定条件的数据。通过指定条件,可以从数据库中检索满足要求的行。即带有WHERE子句的查询:
1.等于(=)操作符:
SELECT * FROM 表名 WHERE 列名 = 值;
该查询将返回列名等于给定值的行。
2.不等于(<>或!=)操作符:
SELECT * FROM 表名 WHERE 列名 <> 值;
该查询将返回不等于给定值的行。
3.大于(>)和小于(<)操作符:
SELECT * FROM 表名 WHERE 列名 > 值;
该查询将返回列名大于给定值的行。
4.大于等于(>=)和小于等于(<=)操作符:
SELECT * FROM 表名 WHERE 列名 <= 值;
该查询将返回列名小于等于给定值的行。
1. 在 FROM 子句中创建派生表:
SELECT t1.column1, t2.column2
FROM (SELECT column1, column2 FROM table1) AS t1
JOIN (SELECT column1, column2 FROM table2) AS t2
ON t1.column1 = t2.column1;
这个查询将嵌套查询 `(SELECT column1, column2 FROM table1)` 和 `(SELECT column1, column2 FROM table2)` 视为派生表 `t1` 和 `t2`,并通过连接它们来检索数据。
2. 在 SELECT 语句中使用嵌套查询:
SELECT column1, (SELECT MAX(column2) FROM table2) AS max_value
FROM table1;
这个查询返回 `table1` 表的每一行,以及从 `table2` 表中获取的最大值(计算列)。
3. 在 WHERE 子句中使用嵌套查询:
SELECT column1, column2
FROM table1
WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);
这个查询检索 `table1` 表中满足嵌套查询条件的行。
要使用嵌套查询,只需要将内部查询放在外部查询的适当位置,并将其视为一个普通的表或数据源进行操作。嵌套查询的结果将作为外部查询的一部分来处理。
MS SQL2008R2 监控
使用X86
引用C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies
下的
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.ConnectionInfoExtended.dll
代码
try
{
ConnectionInfoBase conninfo = new SqlConnectionInfo();
((SqlConnectionInfo)conninfo).ServerName = "XN_PCWindow";
((SqlConnectionInfo)conninfo).UserName = "xn";
((SqlConnectionInfo)conninfo).Password = "123abc";
((SqlConnectionInfo)conninfo).DatabaseName = "xysys";
((SqlConnectionInfo)conninfo).UseIntegratedSecurity = true;
TraceServer trace = new TraceServer();
trace.InitializeAsReader(conninfo, "look.tdf");
while (trace.Read())
{
//Statements;
Console.WriteLine(trace["TextData"]);
}
Console.Read();
trace.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
创建模板文件
列筛选器
点击“TextData”,输入2列值,比如我们现在只监视插入语句和更新语句,就输入%insert%,回车。再第二行输入“%update%”
导出look.tdf
MSSQL问题解决收集
[MSSQL]数据库展开报错:值不能为空或当MSSQL出现目录错误时
在目录C:\Users\Administrator\AppData\Local\Temp
下创建目录
C:\Users\Administrator\AppData\Local\Temp\1
C:\Users\Administrator\AppData\Local\Temp\2
C:\Users\Administrator\AppData\Local\Temp\3
SQL Server调用的VC动态库
DLL源码:
#include <stdafx.h>
#include "Winsock2.h"
#pragma comment (lib,"ws2_32.lib")
#define XP_NOERROR 0
#define XP_ERROR 1
#define MAXCOLNAME 25
#define MAXNAME 25
#define MAXTEXT 255
#ifdef __cplusplus
extern "C" {
#endif
RETCODE __declspec(dllexport) xp_Hello(SRV_PROC *srvproc);
#ifdef __cplusplus
}
#endif
void SendMsg(BYTE *pData,int L)
{
//初始化SOCKET
WSADATA wsaData;
int iRet=WSAStartup(MAKEWORD(2,1),&wsaData);
SOCKET UDPSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(UDPSocket==INVALID_SOCKET)
{
return ;
}
sockaddr_in InternetAddr;
InternetAddr.sin_family=AF_INET;
InternetAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
InternetAddr.sin_port=htons(7210);
if(bind(UDPSocket,
(PSOCKADDR )&InternetAddr,
sizeof(InternetAddr))==SOCKET_ERROR)
{
closesocket(UDPSocket);
UDPSocket=INVALID_SOCKET;
return ;
}
struct sockaddr addr;
memset(&addr,0,sizeof(struct sockaddr));
((sockaddr_in *)&addr)->sin_port=htons((short)5300);
((sockaddr_in *)&addr)->sin_family=AF_INET;
((sockaddr_in *)&addr)->sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
sendto(UDPSocket,(char *)pData,L,0,&addr,sizeof(struct sockaddr));
closesocket(UDPSocket);
}
RETCODE __declspec(dllexport) xp_Hello(SRV_PROC *srvproc)
{
DBSMALLINT i = 0;
DBCHAR colname[MAXCOLNAME];
DBCHAR spName[MAXNAME];
DBCHAR spText[MAXTEXT];
// Name of this procedure
wsprintf(spName, "xp_Hello");
int paramCount=srv_rpcparams(srvproc);
for(i=0;i<paramCount;i++)
{
BYTE bType;
unsigned long cbMaxLen;
unsigned long cbActualLen;
BOOL fNull;
cbActualLen=srv_paramlen(srvproc,i+1);
BYTE *pData=new BYTE[cbActualLen+1];
memset(pData,0,cbActualLen+1);
memcpy(pData,srv_paramdata(srvproc,i+1),cbActualLen);
int nDataType=srv_paramtype(
srvproc,
i+1);
SendMsg(pData,cbActualLen);
delete[]pData;
}
//Send a text message
wsprintf(spText, "%s Sample Extended Stored Procedure", spName);
srv_sendmsg(
srvproc,
SRV_MSG_INFO,
0,
(DBTINYINT)0,
(DBTINYINT)0,
NULL,
0,
0,
spText,
SRV_NULLTERM);
//Set up the column names
wsprintf(colname, "ID");
srv_describe(srvproc, 1, colname, SRV_NULLTERM, SRVINT2, sizeof(DBSMALLINT), SRVINT2, sizeof(DBSMALLINT), 0);
wsprintf(colname, "spName");
srv_describe(srvproc, 2, colname, SRV_NULLTERM, SRVCHAR, MAXNAME, SRVCHAR, 0, NULL);
wsprintf(colname, "Text");
srv_describe(srvproc, 3, colname, SRV_NULLTERM, SRVCHAR, MAXTEXT, SRVCHAR, 0, NULL);
// Update field 2 "spName", same value for all rows
srv_setcoldata(srvproc, 2, spName);
srv_setcollen(srvproc, 2, strlen(spName));
// Send multiple rows of data
for (i = 0; i < 3; i++) {
// Update field 1 "ID"
srv_setcoldata(srvproc, 1, &i);
// Update field 3 "Text"
wsprintf(spText, "%d) Sample rowset generated by the %s extended stored procedure", i, spName);
srv_setcoldata(srvproc, 3, spText);
srv_setcollen(srvproc, 3, strlen(spText));
// Send the entire row
srv_sendrow(srvproc);
}
// Now return the number of rows processed
srv_senddone(srvproc, SRV_DONE_MORE | SRV_DONE_COUNT, (DBUSMALLINT)0, (DBINT)i);
return XP_NOERROR ;
}
实用:
在master中添加扩展存储过程
sp_addextendedproc 'xp_Hello', 'd:\VCDll.dll'
卸载的方法:
sp_dropextendedproc 'xp_Hello'
赋予扩展存储过程使用权限
在要用的库中加自定义函数
CREATE Function dbo.Hello
(
)
RETURNS int as
begin
EXEC master.dbo.xp_Hello 'Hello SQL Server'/*在函数里使用扩展存储过程*/
return 1
end
在要用的库中加存储过程
CREATE PROCEDURE xxx AS
exec Hello /*调用函数*/
select * from systypes
GO
编写MSSQL调用的DLL
--开启clr功能
EXEC sp_configure 'show advanced options','1';
GO
RECONFIGURE;
GO
EXEC sp_configure 'clr enabled','1'
RECONFIGURE;
GO
--要改变的数据库
ALTER DATABASE [nodedb_003] SET TRUSTWORTHY ON
GO
--将dll文件添加到信任白名单
DECLARE @hash AS BINARY(64) = (SELECT HASHBYTES('SHA2_512', (SELECT * FROM OPENROWSET (BULK 'F:\2019LastCode\ASP.NET\MSSQLDll\MSSQLDll\bin\Release\MSSQLDll.dll', SINGLE_BLOB) AS [Data])))
EXEC sp_add_trusted_assembly @hash
go
--解决:在 master 数据库中记录的数据库所有者 SID 与在数据库 '**' 中记录的数据库所有者 SID 不同
sp_changedbowner 'sa',true
--创建程序集,【SQL_CLR_Decode】是创建的程序集名称,可以自定义
CREATE ASSEMBLY SQL_CLR_Decode
FROM 'F:\2019LastCode\ASP.NET\MSSQLDll\MSSQLDll\bin\Release\MSSQLDll.dll'
WITH PERMISSION_SET = unSAFE
GO
--创建函数
CREATE FUNCTION SqlDecode(@source_str NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
--SQL_CLR_Decode是创建的程序集名称,DecodeCLR是程序集中命名空间的名称,CLRClass是类名,Decode是要调用的程序集中的方法名
EXTERNAL NAME SQL_CLR_Decode.[MSSQLDll.CLRClass].Decode
GO
--调用函数
select dbo.SqlDecode('1Y3C1Y3Y')
MSSQLDll源码 创建类库,版本.NET3.5
namespace MSSQLDll
{
public class CLRClass
{
[Microsoft.SqlServer.Server.SqlMethod]
public static string Decode(string source_str)
{
return "hello " + source_str;
}
}
}
MSSQL操作JSON字符串
Json 是一种流行的数据存储和传输格式,SQL Server 从 2016 版本开始,通过系统内置的 Json函数 编写 SQL 语句即可 处理 Json 数据,以及 生成 Json 数据
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{
"Order": {
"Number":"SO43659",
"Date":"2011-05-31T00:00:00"
},
"AccountNumber":"AW29825",
"Item": {
"Price":2024.9940,
"Quantity":1
}
},
{
"Order": {
"Number":"SO43661",
"Date":"2011-06-01T00:00:00"
},
"AccountNumber":"AW73565",
"Item": {
"Price":2024.9940,
"Quantity":3
}
}
]'
SELECT * FROM
OPENJSON ( @json )
WITH (
Number varchar(200) '$.Order.Number' ,
Date datetime '$.Order.Date',
Customer varchar(200) '$.AccountNumber',
Quantity int '$.Item.Quantity'
)
Number | Date | 客户 | 数量 |
---|---|---|---|
SO43659 | 2011-05-31T00:00:00 | AW29825 | 1 |
SO43661 | 2011-06-01T00:00:00 | AW73565 | 3 |
调试实际通过哟的GET请求函数
USE [nodedb_003]
GO
/****** Object: UserDefinedFunction [dbo].[GetWeb] Script Date: 07/20/2023 21:26:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetWeb]
(
@url nvarchar(100),
@data nvarchar(500)
)
RETURNS nvarchar(4000) #特别主要有些字符串尽量定义好长度
AS
BEGIN
DECLARE @ErrMsg VARCHAR(5000)
DECLARE @token INT,@result INT,@returnTextErr VARCHAR(200),@HttpStatus VARCHAR(200)
Declare @ResponseText AS varchar(4000)
DECLARE @source varchar(max)
DECLARE @description varchar(max)
SET @ResponseText=''
EXECUTE @result =sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @token OUT
IF @result<>0
BEGIN
EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
SET @ErrMsg = '初始化对象失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
RETURN @ErrMsg
END
EXECUTE @result = sp_OAMethod @token, 'open', NULL, 'GET',@url,'false'
IF @result <> 0
BEGIN
EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
SET @ErrMsg = '创建连接失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
RETURN @ErrMsg
END
EXECUTE @result=sp_OAMethod @token, 'send', NULL, @data --发送数据
IF @result <> 0
BEGIN
EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
SET @ErrMsg = '发送请求头失败,'+ @ErrMsg + ISNULL(@returnTextErr, '')
RETURN @ErrMsg
END
EXECUTE @result = sys.sp_OAGetProperty @token, 'Status', @HttpStatus OUT
IF @result <> 0
BEGIN
EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
SET @ErrMsg = '读取[Status]属性值失败,'+ @ErrMsg + ISNULL(@returnTextErr,'')
RETURN @ErrMsg
END
IF @HttpStatus <> 200
BEGIN
SET @ErrMsg ='访问错误,http状态代码,'+ @HttpStatus +''
RETURN @ErrMsg
END
--EXECUTE @ResponseText =sp_OAGetProperty @token, 'responseText'
--set @ResponseText='1111'
--Exec sp_OAMethod @token, 'responseText',@ResponseText OUT
EXEC @result= SP_OAGetProperty @token,'responseText',@ResponseText OUT;
IF @result <> 0
BEGIN
EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
SET @ErrMsg = '读取[responseText]属性值失败,'+ @ErrMsg + ISNULL(@returnTextErr,'')
EXEC sp_OADestroy @token
RETURN @ErrMsg
END
--EXECUTE sp_OAGetErrorInfo @token,@source OUT, @description OUT --异常输出
--Select @ResponseText
EXEC sp_OADestroy @token
RETURN @ResponseText
END
SQL Server存储过程模拟HTTP请求POST和GET协议
/****** Object: StoredProcedure [dbo].[sp_http_get] Script Date: 05/23/2020 15:47:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_http_get](
@URL varchar(500),
@ResponseText varchar(8000) OUTPUT
)
AS
BEGIN
Declare @Status as Int
Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Status OUT;
Exec sp_OAMethod @Status, 'open', NULL, 'GET',@URL,'false'
Exec sp_OAMethod @Status, 'send', NULL, NULL
Exec sp_OAMethod @Status, 'responseText', @ResponseText OUTPUT
if @Status<>0
begin
EXEC sp_OAGetErrorInfo @Status
end
Exec sp_OADestroy @Status
END
GO
CREATE PROCEDURE [dbo].[sp_http_post](
@URL varchar(500),
@Data varchar(8000),
@ResponseText varchar(8000) OUTPUT
)
AS
BEGIN
Declare @Status as Int
Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Status OUT;
Exec sp_OAMethod @Status, 'open', NULL, 'POST',@URL,'false'
Exec sp_OAMethod @Status, 'setRequestHeader', NULL, 'Content-Type','application/x-www-form-urlencoded'
Exec sp_OAMethod @Status, 'send', NULL, @Data
Exec sp_OAMethod @Status, 'responseText', @ResponseText OUTPUT
if @Status<>0
begin
EXEC sp_OAGetErrorInfo @Status
end
Exec sp_OADestroy @Status
END
GO
Sqlserver调用api
一、首先要开启组件的配置
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ole Automation Procedures';
GO
二、调用webservice
1、使用sqlserver调用对应的接口以及结果
declare @ServiceUrl as varchar(1000)
set @ServiceUrl = 'http://localhost:19930/LoginWebService.asmx/Login'
DECLARE @data varchar(max);
set @data='userid=1&phone=17647582259'
Declare @Object as Int
Declare @ResponseText AS varchar(1000) ;
Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'POST',@ServiceUrl,'false'
Exec sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type','application/x-www-form-urlencoded'
Exec sp_OAMethod @Object, 'send', NULL, @data --发送数据
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
EXEC sp_OAGetErrorInfo @Object --异常输出
Select @ResponseText
Exec sp_OADestroy @Object
GO
三、调用webapi
1、接口调用以及结果
GET操作
declare @ServiceUrl as varchar(1000)
set @ServiceUrl = 'http://xxxxx.com/api?userid=6'
DECLARE @data varchar(max);
set @data=''
Declare @Object as Int
Declare @ResponseText AS varchar(8000) ;
Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'GET',@ServiceUrl,'false'
Exec sp_OAMethod @Object, 'send', NULL, @data --发送数据
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
EXEC sp_OAGetErrorInfo @Object --异常输出
Select @ResponseText
Exec sp_OADestroy @Object
GO
POST操作
declare @ServiceUrl as varchar(1000)
set @ServiceUrl = 'http://xxx.com/webapi'
DECLARE @data varchar(max);
--发送数据
set @data='CityName=SubmitSystemName=%E7%99%BE%E5%BA%A6%E5%8F%8D%E9%A6%88&OriginID=2d90660c-436c-4e12-bfa6-e849a06b2c51&Price=10000&IsAccurate=False&PriceType=1&UserKeyId=a669e4ec7bdc47a7b6c2c334ebe1a50c&signature=X8p3lIZT0Ba3LeiC6irm3%2FMnlE8%3D&time=1452735047291'
Declare @Object as Int
Declare @ResponseText AS varchar(8000) ;
Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'POST',@ServiceUrl,'false'
Exec sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type','application/x-www-form-urlencoded'
Exec sp_OAMethod @Object, 'send', NULL, @data --发送数据
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
EXEC sp_OAGetErrorInfo @Object --异常输出
Select @ResponseText
Exec sp_OADestroy @Object
GO
四、存储过程
CREATE PROC P_Service
@ServiceUrl varchar(1000),
@data varchar(max),
@GetOrPost varchar(100),
@HeadersKey varchar(200),
@HeadersValue varchar(200)
as
Declare @Object as Int
Declare @ResponseText AS varchar(1000) ;
Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, @GetOrPost,@ServiceUrl,'false'
Exec sp_OAMethod @Object, 'setRequestHeader', NULL, @HeadersKey,@HeadersValue
Exec sp_OAMethod @Object, 'send', NULL, @data --发送数据
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
--EXEC sp_OAGetErrorInfo @Object --异常输出
Select @ResponseText
Exec sp_OADestroy @Object
GO
VC使用SQL-DMO接口控制SQL Server
微软为外部程序的MS SQL Server服务访问提供了功能强大的COM接口,通过这些接口,可以不费吹灰之力就可以方便的访问SQL的服务。
第一步:在MS SQL Server的安装目录下面找到在sqldmo.rll文件,然后
#import "sqldmo.rll" no_namespace
这样就生产了sqldmo.tlh和sqldmo.tli文件,里面包含了SQL的COM接口的定义和实现。
第二步:就是具体的实现了。
先来一个启动SQL Server服务
BOOL StartSQLServer()
{
//先初始化COM
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Com初始化错误!");
return FALSE;
}
//定义一个SQL Server的对象指针
_SQLServerPtr spSQLServer;
//标准方法,建立实例
if (FAILED(spSQLServer.CreateInstance(__uuidof(SQLServer))))
{
AfxMessageBox("无法建立SQL对象!");
return FALSE;
}
try
{
//这里设置连接SQL的一些参数
//简单。设置Login超时
spSQLServer->PutLoginTimeout(10);
//随便起个名字好啦,管不着我啦
spSQLServer->PutApplicationName("MyAppName");
spSQLServer->PutHostName("MyHostName");
//网络数据Packet的大小
spSQLServer->PutNetPacketSize(1024);
CString strServer(”(Local)”);
Cstring strUserName(“sa”); //连接启动的用户名,也可以使用信任连接,不用提供用户名和密码,请参考MSDN
Cstring strPassword(””);//就是密码啦 spSQLServer->Connect(_variant_t(strServer),_variant_t(strUserName),_variant_t());
}
catch(_com_error pCE)
{
//连接错误啦,是服务器没有启动吧
try
{
//真正启动SQL Server的代码在这里 spSQLServer->Start(FALSE,_variant_t(strServer),_variant_t(strUserName),_variant_t(strPassword)); }
catch(_com_error pCE)
{
//这次的异常处理倒没有执行什么操作啊,随便处理一下,返回一个错误信息啦。
AfxMessageBox(pCE.Description());
spSQLServer.Release();
return FALSE;
}
}
//接下来是释放资源啦,try catch是不是用成习惯了,这样也要??反正是没有错的,多用一下也好啦。
try
{
spSQLServer.Release();
spSQLServer.Release();
}
catch(_com_error pCE)
{
AfxMessageBox(pCE.Description());
return FALSE;
}
//释放COM
CoUninitialize();
return TRUE;
}
通过#import "sqldmo.rll"还能获得其他的很多接口,比如Attach数据库、FullTextService、获得设置SQL Server服务器的属性等等,当然相对应的停止SQL服务我就不用说了吧。
MSSQL的命令行
执行脚本文件
sqlcmd -S myServer\instanceName -i C:\myScript.sql
sqlcmd -S . -U sa -P 123456 -d test -i data.sql
参数说明:-S 服务器地址 -U 用户名 -P 密码 -d 数据库名称 -i 脚本文件路径
本地服务器地址可以写 ,也可写(local)或者IP地址
###其他sqlcmd所有功能
用法: Sqlcmd [-U 登录 ID] [-P 密码]
[-S 服务器] [-H 主机名] [-E 可信连接]
[-N 加密连接][-C 信任服务器证书]
[-d 使用数据库名称] [-l 登录超时值] [-t 查询超时值]
[-h 标题] [-s 列分隔符] [-w 屏幕宽度]
[-a 数据包大小] [-e 回显输入] [-I 允许带引号的
[-c 命令结束] [-L[c] 列出服务器[清除输出]]
[-q "命令行查询"] [-Q "命令行查询" 并退出]
[-m 错误级别] [-V 严重级别] [-W 删除尾随空格]
[-u unicode 输出] [-r[0|1] 发送到 stderr 的消息]
[-i 输入文件] [-o 输出文件] [-z 新密码]
[-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出]
[-k[1|2] 删除[替换]控制字符]
[-y 可变长度类型显示宽度]
[-Y 固定长度类型显示宽度]
[-p[1] 打印统计信息[冒号格式]]
[-R 使用客户端区域设置]
[-K 应用程序意向]
[-M 多子网故障转移]
[-b 出错时中止批处理]
[-v 变量 = "值"...] [-A 专用管理连接]
[-X[1] 禁用命令、启动脚本、环境变量[并退出]]
[-x 禁用变量替换]
[-? 显示语法摘要]
with as 进行表的树查询
查阅相关资料,对于数性表结构的数据,生成的SQ可参考以下代码实现,为避免排版出现混乱,增加必要的文字进行填充
SQLString = "with temp(sys_js_uuid,jsname,parentjs_uuid,sys_companys_nodeuuid,ischild)";
SQLString += " as ";
SQLString += "(";
SQLString += "select sys_js_uuid,jsname,parentjs_uuid,sys_companys_nodeuuid,ischild ";
SQLString += " from sys_js ";
SQLString += " where parentjs_uuid=" + m_SessionLink.sys_js_uuid + " and ischild=1";
SQLString += " union all ";
SQLString += "select a.sys_js_uuid,a.jsname,a.parentjs_uuid,a.sys_companys_nodeuuid,a.ischild ";
SQLString += " from sys_js a ";
SQLString += " inner join temp on a.parentjs_uuid=temp.sys_js_uuid and a.ischild=1";
SQLString += ")";
SQLString += "select * from temp where sys_companys_nodeuuid=0 or sys_companys_nodeuuid=" + sys_companys_nodeuuid;
SQLSERVER一些公用DLL的作用解释
这些DLL有什么用??
这些DLL是供SQLSERVER调用的,因为这些公用DLL在SQLSERVER的很多组件中都有用到,所以SQLSERVER就把这些
DLL放到X:\Program Files\Microsoft SQL Server\X\SDK\Assemblies\文件夹下以供其他SQLSERVER组件调用
例如SSIS、SSAS、数据库引擎还有其他的工具
其实从文件夹路径名我们就可以知道这些DLL的作用:SDK\Assemblies\
大家不知道SDK的含义可以百度一下,不过可能大家比较赖,我就贴出来吧
SDK(Software Development Kit, 即软件开发工具包 )一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等
建立应用软件的开发工具的集合。
资深程序员一定知道SDK的作用,他就是某个软件提供给我们程序员用来开发的一些接口或者API
本人觉得X:\Program Files\Microsoft SQL Server\X\SDK\Assemblies\文件夹下面的这些DLL不只是提供给SQLSERVER调用的
我们也可以调用这些DLL来开发SQLSERVER数据库的一些相关软件和工具
例子一:
园子里的胡勇大侠就用了下面的两个DLL来做出了: (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
例子二:
又例如这个帖子:用c#做了个,sqlServer2005里面那个事件监控器一样的程序,启动问题请帮看看
用Microsoft.SqlServer.ConnectionInfo.dll这个DLL做一个类似于SQL TRACE的工具出来,用来实时查看执行的脚本以及其他信息
例子三:
SQLDoc Sharp(SQLSERVER数据库文档生成工具)
这个工具在codeproject上可以下载:http://www.codeproject.com/Articles/35790/SQLDoc-Sharp
用到了下面的DLL
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
Microsoft.SqlServer.Smo.dll
Microsoft.SqlServer.SmoExtended.dll
Microsoft.SqlServer.SqlEnum.dll
使用MSSQL SDK实现数据同步
主要使用了sql 2008 SDK的这两个动态库,
第一个:Microsoft.SqlServerConnectionInfoExtended.dll
第二个:Microsoft.SqlServer.ConnectionInfo.dll
SQL2005是C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies
SQL2008才是C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies
SQL2012是:C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies
我观察到SQL2005只有Microsoft.SqlServer.ConnectionInfo.dll DLL文件
而从SQL2008开始才有Microsoft.SqlServer.ConnectionInfoExtended.dll DLL文件
解决SQL Server发布订阅时需要有实际的服务器名称才能连接到服务器的问题
MSSQL数据库同步
快照最好使用FTP快照,同步方式
选择发布类型,这里有四种:快照发布、事务发布、可更新订阅的事务发布、合并发布。快照发布和合并发布都是定期取数据,不同的是合并发布可独立更新,可把订阅端的数据更新同步到发布端;测试发现如果两端同时更新,发布端的更新会覆盖掉订阅端的更新。事务发布是事务驱动,只要有更新,立马同步更新
上一篇:数据库相关技术咨询信息收集
下一篇:数据库目录结构