在SQL Server的T-SQL中,我应该使用"<>"或"!=",还是真的甚至重要?
DECLARE @providerIdList varchar(400)
DECLARE @q varchar(400)
SELECT @q = ''
SELECT @providerIdList = '(1, 5, 15)'
SET @q = 'SELECT u.Id FROM [user] u
LEFT JOIN Provider p ON u.Provider_FK = p.Id
LEFT JOIN Providers2Users pu ON pu.user_FK = u.Id
LEFT JOIN Provider ap ON ap.Id = pu.provider_fk
WHERE p.Id IN ' + @providerIdList
exec @q
Run Code Online (Sandbox Code Playgroud)
以下是我尝试执行上面显示的查询时遇到的异常
Msg 203, Level 16, State 2, Line 18
The name 'SELECT u.Id FROM [user] u
LEFT JOIN Provider p ON u.Provider_FK = p.Id …Run Code Online (Sandbox Code Playgroud) 据我所知,"不能排序大小为9754的行,这大于允许的最大值8094".来自SQL Server的是由一行中有超过9k个字符的行引起的,这个行大于SQL Server 7中的页面大小限制.但是我没有通过下面的数据调用一个命令,所以为什么错误说它不能排序?
SELECT <a number of columns...>
FROM Category10Master c10
JOIN Category20Master c20 ON c10.Cat10ID = c20.ParentCatID
JOIN Category25Master c25 ON c20.Cat20ID = c25.ParentCatID
JOIN Category30Master c30 ON c25.Cat25ID = c30 .ParentCatID
JOIN Item i ON c30.Cat30ID = i.ParentCatID
Run Code Online (Sandbox Code Playgroud)
编辑:是的,我知道我可以调用更少的列来解决这个问题 - 实际的查询显式调用所需的列,但仍超过行大小限制.这实际上是在一个被称为站点范围的视图中,因此更改视图以缩回更少的列不是一个有吸引力的选项 - 需要修改数十个页面以从视图以外的其他位置获取数据.我不幸的是已经把一个丑陋的设计搞得一团糟,我希望有人能提供比吸引更少数据更有吸引力的解决方案.
假设我有搜索工作的人,我有一份工作清单.所以我有两张桌子:人和工作.现在我有一个人的技能列表,我有一份工作要求的技能列表.
有一个这样的技能表更好:
CREATE TABLE skills_reference
(
id INT,
reference_id INT, -- can reference people(id) or job(id)
reference ENUM('person','job'),
skill FOREIGN KEY REFERENCE skills(id)
)
Run Code Online (Sandbox Code Playgroud)
或者有两个表,一个用于people_skills,一个用于jobs_skills.哪一个会带来更好的性能效果?
谢谢.
我正在编写sql来通过许多参数搜索数据库.我如何按照与where子句中的大多数参数匹配的项来排序结果集.例如:
SELECT *
FROM users
WHERE username = 'eitan'
OR email = 'eitan@eitan.com'
OR company = 'eitan'
Username | email | company
1) eitan | blah@blah.com | blah
2) eitan | eitan@eitan.com | eitan
3) eitan | eitan@eitan.com | blah
Run Code Online (Sandbox Code Playgroud)
应订购如下:
2,3,1.
谢谢.(ps查询不是那么容易,在WHERE中有很多连接和很多OR)
埃坦
我最近一直在研究SQL并进行一些探索.关于临时表我发现了3种不同的临时表类型:
1)CREATE TABLE #TempTable
2)DECLARE TABLE @TempTable
3)SELECT*FROM(SELECT*FROM Customers)AS TempTable
现在我理解了#TempTable和@TempTable类型背后的范围,但是如例3中的派生表呢?这个派生表存储在哪里?如果它在1个事务中声明,第二个事务是否可以访问它,或者是与示例1和2相同的派生表的范围?
我有一个人员表,其中包含一个错误代码字段,可以包含多个错误代码(001,002,003 ...).我知道这是一个架构问题,但这是一个供应商应用程序,我无法控制架构,所以我必须使用我所拥有的.
还有一个Error表包含ErrorCode(char(3))和Descript(char(1000)).在我的查询中,Person.ErrorCode连接到Error.ErrorCode以获取相应描述的值.
对于只有一个错误代码的人员记录,我可以毫无问题地获得相应的描述.我想要做的是以某种方式将Descript值连接到存在多个错误的记录.
例如,这是来自Error表的一些示例数据:
ErrorCode Descript
001 Problem with person file
002 Problem with address file
003 Problem with grade
Run Code Online (Sandbox Code Playgroud)
以下是我的SELECT on Person上出现的列,其中出现了一个错误的JOIN:
Person.RecID Person.ErrorCode Error.Descript
12345 001 Problem with person file
12346 003 Problem with grade
12347 002,003
Run Code Online (Sandbox Code Playgroud)
我想要得到的是:
Person.RecID Person.ErrorCode Error.Descript
12345 001 Problem with person file
12346 003 Problem with grade
12347 002,003 Problem with address file, Problem with grade
Run Code Online (Sandbox Code Playgroud)
建议赞赏!
当我点击Click Here!!!我得到两个alert()消息,但不是值BBB和ZZZ我想到,我得到undefined和undefined.
我有什么想法我做错了吗?我正在运行Firefox 8.0,适用于IE 8
<HTML>
<HEAD>
</HEAD>
<BODY>
<div id="1_0">
<div id='1_1' style="background-color: yellow;">
<input="hidden" id="1_a" value="AAA"/>
<input="hidden" id="1_b" value="BBB"/>
some text, and some more
<div>
<div style="background-color: silver;" onclick="alert(document.getElementById('1_b').value);alert(document.getElementById('1_z').value);">
Click Here!!!
</div>
</div>
</div>
</div>
<input="hidden" id="1_z" value="ZZZ"/>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud) 假设我在表中有两列.如果我试图插入一列,那么该值也应自动出现在另一列中.但我不想因为性能而使用触发器.
我在添加新列时看到了一些地方,他在数据类型之后使用了"表达式"
请帮我.
我有一台以2012兼容模式运行数据库的SQL Server 2017服务器。但是,当我尝试使用2017 T-SQL的新命令时string_agg(),它可以工作。我预计会出现语法错误,因为string_agg()对于2012模式无效。
这是我正在使用的SQL:
SELECT
Compatibility_Level,
CASE Compatibility_Level
WHEN 65 THEN 'SQL Server 6.5'
WHEN 70 THEN 'SQL Server 7.0'
WHEN 80 THEN 'SQL Server 2000'
WHEN 90 THEN 'SQL Server 2005'
WHEN 100 THEN 'SQL Server 2008/R2'
WHEN 110 THEN 'SQL Server 2012'
WHEN 120 THEN 'SQL Server 2014'
WHEN 130 THEN 'SQL Server 2016'
WHEN 140 THEN 'SQL Server 2017 <<<'
ELSE 'new unknown - ' + CONVERT(VARCHAR(10), Compatibility_Level)
END AS VersionName
FROM …Run Code Online (Sandbox Code Playgroud) sql-server ×6
sql ×5
t-sql ×4
database ×2
html ×1
javascript ×1
matching ×1
parameters ×1
performance ×1
scoping ×1
sql-server-7 ×1
temp-tables ×1