我正在处理一个与以下内容非常类似的查询:
CREATE TABLE #test (a char(1), b char(1))
INSERT INTO #test(a,b) VALUES
('A',NULL),
('A','B'),
('B',NULL),
('B',NULL)
SELECT DISTINCT a,b FROM #test
DROP TABLE #test
Run Code Online (Sandbox Code Playgroud)
结果是,毫不奇怪,
a b
-------
A NULL
A B
B NULL
Run Code Online (Sandbox Code Playgroud)
我希望实际看到的输出是:
a b
-------
A B
B NULL
Run Code Online (Sandbox Code Playgroud)
也就是说,如果列在某些记录中有值但在其他记录中没有,我想抛出该列为NULL的行.但是,如果列的所有记录都具有NULL值,我想保留该NULL.
在单个查询中执行此操作的最简单/最优雅的方法是什么?
我觉得如果我在周五下午没有筋疲力尽,这将很简单.
在我的开发工作室中,我们在位于远程网络上的虚拟服务器上部署代码.
我们通过首先打开到网关服务器的SSH连接,然后通过本地端口SSH隧道传输RDP来访问该网络上的计算机.
我非常希望能够以相同的方式本地访问在这些服务器上运行的SQL Server实例.
我已经设置了一个本地端口(3398)来重定向到远程实例上的SQL Server端口(L3398 - > remote.machine.com:1433).
然后我可以通过telnet到localhost 3398实际测试连接,然后我得到一个连接:屏幕清除,我可以在一些监听过程中输入字符.
但是当我尝试将SSMS连接到localhost:3398时,它超时然后声称没有SQL Server侦听该端口:
Cannot connect to localhost:3398
Additional information:
A network-related or instance-specific error occurred while establishing a connection
to SQL Server. The server was not found or was not accessible. Verify that the
instance name is correct and that SQL Server is configured to allow remote
connections. (...)
Run Code Online (Sandbox Code Playgroud)
我确信服务器接受远程连接,因为我已通过RDP远程连接到远程连接到远程网络中的其他计算机.
我用谷歌搜索知道这是可能的; 有没有人知道为什么这不起作用,或者我可能做什么来诊断并希望解决问题?
谢谢!
我们看到我们的数据库连接因org.apache.commons.dbcp.BasicDataSource插槽写入错误而死的情况:
com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
Run Code Online (Sandbox Code Playgroud)
当然,所有后续写入连接的尝试都会失败:
com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
Run Code Online (Sandbox Code Playgroud)
更新代码以捕获此类异常并在发生新连接时请求它,它再次失败.我是否正确怀疑DataSource#getConnection()每次呼叫时呼叫实际上并没有提供新的连接?是不是只是重用现有的连接,这是关闭的?
如果我是正确的,什么是丢弃旧连接并请求新连接的正确方法?
编辑:这是我想知道的更简洁的版本:
Connection c1, c2;
c1 = DatabaseManager.getConnection();
// c1.close() not called
c2 = DatabaseManager.getConnection();
Run Code Online (Sandbox Code Playgroud)
"c1 == c2"是真实的陈述吗?或者分配了两个连接?如果是后者,那么像这样的代码表示"连接池泄漏":
Connection c1;
c1 = DatabaseManager.getConnection();
// c1.close() not called
c1 = DatabaseManager.getConnection();
Run Code Online (Sandbox Code Playgroud) 来自 PostgreSQL(相对)新手的快速问题:
我们运行一个批处理,作为最后一步,删除大部分以前的批处理。
磁盘空间是一个问题,因此我们需要确保 PostgreSQL 自行清理。
除了强制 PostgreSQL 更快地进行垃圾收集之外,在批处理结束时显式调用 VACUUM 与让 auto-VACUUM 守护进程处理它之间有什么区别吗?有什么理由推荐一种方法与另一种方法吗?
谢谢!
sql-server ×2
autovacuum ×1
java ×1
jdbc ×1
postgresql ×1
sql ×1
ssh ×1
ssh-tunnel ×1
vacuum ×1