我正在寻找一种通过查询连接组内字段的字符串的方法.例如,我有一张桌子:
ID COMPANY_ID EMPLOYEE
1 1 Anna
2 1 Bill
3 2 Carol
4 2 Dave
Run Code Online (Sandbox Code Playgroud)
我想通过company_id分组得到类似的东西:
COMPANY_ID EMPLOYEE
1 Anna, Bill
2 Carol, Dave
Run Code Online (Sandbox Code Playgroud)
mySQL中有一个内置函数来执行这个group_concat
在SQL Server 2005中,使所有字符字段nvarchar(MAX)而不是明确指定长度是否有任何缺点,例如nvarchar(255)?(除了显而易见的一个,你无法限制数据库级别的字段长度)
我可以通过以下方式选择列中的所有不同值:
SELECT DISTINCT column_name FROM table_name;SELECT column_name FROM table_name GROUP BY column_name;但是如何从该查询中获取行数呢?是否需要子查询?
我在一些插入T-SQL查询中看到了前缀N. 许多人N在将值插入表中之前已经使用过.
我搜索过,但是我无法理解N在将任何字符串插入表格之前包括之前的目的是什么.
INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
Run Code Online (Sandbox Code Playgroud) 执行以下脚本时出现以下错误.什么是错误,以及如何解决?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Run Code Online (Sandbox Code Playgroud)
错误:
服务器:消息544,级别16,状态1,行1
当IDENTITY_INSERT设置为OFF时,无法在表'table'中为identity列插入显式值.
我正在为Oracle数据库编写一些迁移脚本,并且希望Oracle有类似MySQL的IF EXISTS构造.
具体来说,每当我想在MySQL中删除表时,我都会这样做
DROP TABLE IF EXISTS `table_name`;
Run Code Online (Sandbox Code Playgroud)
这样,如果表不存在,DROP则不会产生错误,脚本可以继续.
Oracle是否有类似的机制?我意识到我可以使用以下查询来检查表是否存在
SELECT * FROM dba_tables where table_name = 'table_name';
Run Code Online (Sandbox Code Playgroud)
但是把它与a绑在一起的语法DROP正在逃避我.
在SQL中(遗憾的是)LIKE由于数据库违反了几乎所有规范化规则,因此经常不得不使用" "条件.我现在无法改变它.但这与这个问题无关.
此外,我经常使用条件,例如WHERE something in (1,1,2,3,5,8,13,21)更好的可读性和SQL语句的灵活性.
在没有编写复杂的子选择的情况下,有没有可能将这两种方法结合起来?
我想要一些简单WHERE something LIKE ('bla%', '%foo%', 'batz%')而不是这样的东西:
WHERE something LIKE 'bla%'
OR something LIKE '%foo%'
OR something LIKE 'batz%'
Run Code Online (Sandbox Code Playgroud)
我在这里使用SQl Server和Oracle,但我很感兴趣,如果在任何RDBMS中都可以这样做.
我正在使用Sybase,我正在做一个select,它返回一个名为"iftype"的列,但它的类型是int,我需要转换为varchar.当我尝试在没有转换功能的情况下进行选择时,我收到此错误:
错误代码257,SQL状态37000:不允许从数据类型"VARCHAR"到"INT"的隐式转换.使用CONVERT函数运行此查询.
我不知道如何实现该功能CONVERT.有人可以帮帮我吗?
我有一对夫妇在性C#这是double我想将这些存储在SQL Server中的表,但发现没有double类型,所以什么是最好的使用,decimal还是float?
这将存储纬度和经度值,因此我需要最精确的精度.
感谢到目前为止的回复.
灵感来自这个问题,对于SET NOCOUNT有不同的看法......
我们应该为SQL Server使用SET NOCOUNT ON吗?如果没有,为什么不呢?
它的作用编辑6,2011年7月22日
它会在任何DML之后抑制"xx行受影响"消息.这是一个结果集,当发送时,客户端必须处理它.它很小,但可以测量(见下面的答案)
对于触发器等,客户端将收到多个"受影响的xx行",这会导致某些ORM,MS Access,JPA等出现各种错误(参见下面的编辑)
背景:
一般接受的最佳实践(我想直到这个问题)是SET NOCOUNT ON在SQL Server中的触发器和存储过程中使用.我们在任何地方都使用它,快速谷歌显示大量的SQL Server MVP也同意.
MSDN表示这可能会破坏.net SQLDataAdapter.
现在,这对我来说意味着SQLDataAdapter仅限于完全简单的CRUD处理,因为它希望"n行受影响"消息匹配.所以,我不能用:
在问题marc_s(谁知道他的SQL的东西)说不要使用它.这与我的想法不同(我认为自己在SQL方面也有一定的能力).
有可能我错过了一些东西(随意指出明显的东西),但你们有什么想法呢?
注意:我看到这个错误已经好几年了,因为我现在不使用SQLDataAdapter.
在评论和问题后编辑:
编辑:更多想法......
我们有多个客户端:一个可以使用C#SQLDataAdaptor,另一个可以使用Java中的nHibernate.这些可能会以不同的方式受到影响SET NOCOUNT ON.
如果您将存储过程视为方法,那么假设某些内部处理以某种方式为您自己的目的而工作则是不好的形式(反模式).
编辑2:触发器打破nHibernate问题,SET NOCOUNT ON无法设置
(不,它不是一个重复的这个)
编辑3:更多信息,感谢我的MVP同事
编辑2011年5月13日
编辑2011年6月14日
使用表变量打破JPA,存储过程:JPA 2.0是否支持SQL Server表变量?
编辑6:2011年8月15日
SSMS"编辑行"数据网格需要SET NOCOUNT ON:使用GROUP BY更新触发器
编辑2013年3月7日7:07
来自@RemusRusanu的更深入的细节:
SET NOCOUNT …
sql ×10
sql-server ×6
t-sql ×4
oracle ×2
sybase ×2
ado.net ×1
c# ×1
concurrency ×1
distinct ×1
group-by ×1
plsql ×1
postgresql ×1
select ×1
sql-drop ×1