将IList集合转换为逗号分隔id的字符串的任何优雅方式?
"1,234,2,324,324,2"
我有这个字符串,我从.net应用程序A,B,C,D,E,F,
我想编写一个像sql select语句一样的
set @string = 'A,B,C,D,E,F'
select * from tbl_test
where tbl_test.code in (@string)
Run Code Online (Sandbox Code Playgroud)
这在t-SQL中不起作用,因为它使用的@string是一个字符串,它不会分隔值.有什么方法可以做到这一点吗?
拿这个表:
id name sub_id
---------------------------
1 A (null)
2 B (null)
3 A2 1
4 A3 1
Run Code Online (Sandbox Code Playgroud)
sub_id列是他自己的表与列ID的关系.
subid --- 0:1 --- id
Run Code Online (Sandbox Code Playgroud)
现在我有一个问题是创建一个正确的SELECT查询,以显示在其父行下直接选择的子行(sub_id不为null).所以这必须是正确的顺序:
1 A (null)
3 A2 1
4 A3 1
2 B (null)
Run Code Online (Sandbox Code Playgroud)
一个正常的SELECT命令id.但是,如何或哪个关键字帮助我正确订购?
我认为JOIN是不可能的,因为我希望将所有行分开.因为行将显示在带有EntityDataSource的Gridview(ASP.Net)上,但子行必须直接显示在其父级下.
谢谢.
我一直在桌子上敲打着试图弄清楚这个.我有一张表来存储工作信息,以及工作未完成的原因.原因是数字,01,02,03等.您可以将两个原因作为待处理作业.如果选择两个原因,它们将存储在同一列中,并以逗号分隔.这是JOBID表中的一个示例:
Job_Number User_Assigned PendingInfo
1 user1 01,02
Run Code Online (Sandbox Code Playgroud)
还有另一个名为Pending的表,用于存储这些值实际表示的内容.01 =信息不足,02 =时间不够,03 =等待审核.例:
Pending_Num PendingWord
01 Not Enough Info
02 Not Enough Time
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是查询数据库,以便为我提供所有工作号,用户,pendinginfo和待决理由.我可以突破第一个值,但无法弄清楚如何做第二个.到目前为止我的技能有限:
select Job_number,user_assigned,SUBSTRING(pendinginfo,0,3),pendingword
from jobid,pending
where
SUBSTRING(pendinginfo,0,3)=pending.pending_num and
pendinginfo!='00,00' and
pendinginfo!='NULL'
Run Code Online (Sandbox Code Playgroud)
我想在这个例子中看到的是:
Job_Number User_Assigned PendingInfo PendingWord PendingInfo PendingWord
1 User1 01 Not Enough Info 02 Not Enough Time
Run Code Online (Sandbox Code Playgroud)
提前致谢
我不确定这是不是一个好问题.
我有一个复杂的查询与很多联合会搜索多个表的某个关键字(用户输入).搜索到的所有表都与表有关book.
使用LIMIT对结果集进行分页,因此总会有最多10个结果被撤消.
我希望结果集中有一个额外的列,显示找到的结果总量. 我不想使用单独的查询来执行此操作.是否可以在结果集中添加count()列来计算找到的每个结果?
输出看起来像这样:
ID Title Author Count(...)
1 book_1 auth_1 23
2 book_2 auth_2 23
4 book_4 auth_.. 23
Run Code Online (Sandbox Code Playgroud)
...
谢谢!
我的 tempdb 大小增长得太多,因为我们在数据库中执行了太多事务。有人可以让我知道如何在不重新启动服务器的情况下缩小这个 tempdb 吗?我尝试过 DBCC SHRINKDATABASE 但没有帮助
提前致谢
我一直最讨厌 MS SQL Server 中的一件事就是安全性的工作方式。如果你有趣地看待服务器,安全上下文会不断切换,而且通常很难(无论如何对我来说)预测或调试。
在今天处理一个问题时,我想,“我希望我可以在代码中添加一行,以显示 SQL Server 在代码运行时使用的安全上下文。” 存在这样的命令吗?例如,SELECT security_context()
更清楚一点...如果我处于存储过程中并且因此受到 SP 所有者的安全上下文的约束,那么我希望看到这一点。如果我在由 sp_executesql 调用的代码中,并且它导致安全性处于 SQL Server 服务帐户的上下文中,那么我希望看到这一点。
至少这样我也许能够弄清楚为什么 SQL Server 认为我不应该访问某些内容。
谢谢!
例子
-- Set up
CREATE USER Test_User WITHOUT LOGIN
CREATE TABLE Test_Security_Context (my_id INT)
INSERT INTO Test_Security_Context VALUES (1)
DENY SELECT ON Test_Security_Context TO Test_User
GO
CREATE PROCEDURE Test_Security_Context_SP
AS
SELECT SUSER_SNAME()
SELECT * FROM Test_Security_Context -- This will return ok
EXEC('SELECT SUSER_SNAME(); SELECT * FROM Test_Security_Context') -- SUSER_SNAME() will match above but select fails …Run Code Online (Sandbox Code Playgroud) 我有一些 MySQL 查询,条件如下
where field1=val1 or field2=val2
Run Code Online (Sandbox Code Playgroud)
有些人喜欢
where fieldx=valx and fieldy=valy and (field1=val1 or field2=val2)
Run Code Online (Sandbox Code Playgroud)
如何通过创建索引来优化这些查询?我的直觉是为第一次查询的 field1 和 field2 创建单独的索引,因为它是一个 OR,所以复合索引可能不会有多大用处。
对于第二个查询,由于上述原因,我打算再次创建 2 个索引:fieldx, fieldy, field1 和 fieldx,fieldy,field2。
这个解决方案正确吗?这是一个非常大的表,所以我不能仅仅通过应用索引和解释查询来进行实验。
我们正在考虑将SQL查询存储在单独的表中.这些查询仅用于报告目的.针对不同报告的不同查询 - 此外,查询将包含占位符,因此我们可以格式化或使用Winforms前端的预准备语句(它是一个简单的2层报告应用程序),例如格式化要报告的日期范围.
我对此有一些复杂的感觉 - 将SQL存储在表中是否可以,客户端将获取并运行?
我正在处理一个大蜂巢表(超过 5000 亿条记录)。处理速度太慢,我想让它更快。我认为通过添加分区,该过程可能会更加有效。
有人能告诉我该怎么做吗?请注意,我的表已经存在。
我的桌子:
create table T(
nom string,
prenom string,
...
date string)
Run Code Online (Sandbox Code Playgroud)
按日期字段分区。
谢谢