SQL Server Profiler 监听 SQL 语句技巧

SQL Server Profiler 是 SQL 跟踪的图形用户界面,用于监视 数据库引擎 或 Analysis Services 的实例。 您可以捕获有关每个事件的数据并将其保存到文件或表中供以后分析。 例如,可以对生产环境进行监视,了解哪些存储过程由于执行速度太慢影响了性能。

SQL Server Profiler 我经常使用,比如监视第三方应用执行的 SQL。再比如使用了 ORM 框架的项目,虽然可以少写很多 SQL,但是当使用 ORM 出现异常时,很难跟踪到内部具体执行的 SQL,这个时候 SQL Server Profiler 就是一大利器了。

通过排序规则解决 SQL Server 中文显示为问号或乱码

通过前两篇文章 ARM Win11 如何安装 SQL Server?DataGrip 如何添加 Azure SQL Edge 的 Data Source? 我已经能成功的在 Mac 上管理 Azure SQL Edge 了。

今天发现导入到 Azure SQL Edge 中数据库的数据,中文显示成 ?,这个问题一看就是配置的字符集不是 Unicode 字符集,那该如何修改字符集呢?

标题用的 SQL Server,是因为 Azure SQL Edge 建立在与 SQL ServerAzure SQL 相同的引擎上。用 SQL Server 大家比较熟知。

ARM Win11 如何安装 SQL Server?

最近买了 Mac Studio,虽然不是 M1 Ultra,但是内存是 64G,为的就是希望通过 PD 安装 Win11不卡。
ARM 架构的 Mac 当然也只能安装 ARM 的 Windows,好在 Win11 有 ARM 版本。安装后,果然在强大的 M1 Max下,Windows 使用起来很流畅。虽然 Win11 能通过套娃的形式,提供一个虚拟环境供x86、x64 应用运行,但今天发现没法安装 SQL Server,这可是微软自家的应用啊,竟然还不兼容。SQL Server 2022 马上就要发布了,只能稍微带点期待了。

然后再看 ARM Win11 和隔壁家的 ARM macOS,对比 ARM 版本的应用,Win11 又输了😂。
而且 Win11 上我仅仅安装了几个应用,而 macOS 已经安装了很多应用了,可见苹果的号召力真大。

既然 Win11 ARM 上安装不了 SQL Server,那么该怎么办呢?

请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接

今天在 Win11 虚拟机中安装好 SQL Server 2019,就立马测试下项目中的程序,首先配置下数据库连接,测试连接确保如下错误:

1
在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft SQL Server,错误: 2)

SQL Server如何生成表结构和数据的脚本?

在想要在开发环境中复现生成环境中的问题,我们可能需要备份生产环境的数据库到开发环境进行测试,但是往往生成环境的中的数据库很大,备份会很慢,其实往往只是在访问某个表时才出现此问题,也仅仅只需要此表即可。

因此我们需要使用一种方法来导出生产环境指定表的结构和数据的脚本,然后在开发环境执行该脚本,即可得到生产环境的数据。

那么SQL Server是否提供此功能呢?

如何正确的将字符串数组传给in

问题

C#使用join将数组的元素用逗号分隔为字符串传递给SQL Server存储过程要么报错,要么查询的表格结果为0条数据。

C#中的代码如下:

1
2
3
4
DataTable dataTable = DbHelperSQL.RunProcedure("proc_Data_GetUploadInfo", new IDataParameter[]
{
new SqlParameter("@BillCodes", $"'{string.Join("','", result.Select(x => x.prepare_num.ToString()).ToArray())}'"),
}, "get").Tables[0];

SQL Server字符串拼接的结果为NULL的问题

问题

某个存储过程的参数有一个输出参数:@msg nvarchar(1024) output ,拼接的字符串会赋值给@msg,然后C#代码获取@msg后显示到界面上。

通过测试后发现字符串和变量拼接竟然变成了空字符串:

1
2
3
4
5
6
7
declare @msg nvarchar(512)
declare @name varchar(50)
set @name='gan'
declare @time datetime
-- CONVERT(varchar,@time,20)是将时间格式化输出
set @msg= 'test: ' + CONVERT(varchar,@time,20) + CAST(@name as varchar)
select '1' + @msg + '2'