今天早上我遇到了一些奇怪的事情,并认为我会提交评论.
有人可以解释为什么以下SQL查询在针对SQL 2008运行时打印"相等".数据库兼容级别设置为100.
if '' = ' '
print 'equal'
else
print 'not equal'
Run Code Online (Sandbox Code Playgroud)
这返回0:
select (LEN(' '))
Run Code Online (Sandbox Code Playgroud)
它似乎是自动修剪空间.我不知道在以前版本的SQL Server中是否就是这种情况,我不再需要测试它.
我遇到了这个,因为生产查询返回了错误的结果.我无法在任何地方找到这种行为.
有没有人有这方面的任何信息?
我有两张桌子:
TableA
------
ID,
Name
TableB
------
ID,
SomeColumn,
TableA_ID (FK for TableA)
Run Code Online (Sandbox Code Playgroud)
这种关系是一排TableA- 许多TableB.
现在,我希望看到这样的结果:
ID Name SomeColumn
1. ABC X, Y, Z (these are three different rows)
2. MNO R, S
Run Code Online (Sandbox Code Playgroud)
这不起作用(子查询中有多个结果):
SELECT ID,
Name,
(SELECT SomeColumn FROM TableB WHERE F_ID=TableA.ID)
FROM TableA
Run Code Online (Sandbox Code Playgroud)
如果我在客户端进行处理,这是一个微不足道的问题.但这意味着我必须在每个页面上运行X查询,其中X是结果的数量TableA.
请注意,我不能简单地执行GROUP BY或类似的操作,因为它将为行返回多个结果TableA.
我不确定使用COALESCE或类似东西的UDF是否可行?
是否有一种简洁的方法从sql server表中检索随机记录?
我想随机化我的单元测试数据,所以我正在寻找一种从表中选择随机id的简单方法.在英语中,select将是"从表中选择一个id,其中id是表中最低id和表中最高id之间的随机数."
我无法找到一种方法来执行它而无需运行查询,测试空值,然后重新运行,如果为null.
想法?
这是我的情景:
假设我有一个存储过程,我需要在一组特定的id上调用另一个存储过程; 有没有办法做到这一点?
即而不是需要这样做:
exec p_MyInnerProcedure 4
exec p_MyInnerProcedure 7
exec p_MyInnerProcedure 12
exec p_MyInnerProcedure 22
exec p_MyInnerProcedure 19
Run Code Online (Sandbox Code Playgroud)
做这样的事情:
*magic where I specify my list contains 4,7,12,22,19*
DECLARE my_cursor CURSOR FAST_FORWARD FOR
*magic select*
OPEN my_cursor
FETCH NEXT FROM my_cursor INTO @MyId
WHILE @@FETCH_STATUS = 0
BEGIN
exec p_MyInnerProcedure @MyId
FETCH NEXT FROM my_cursor INTO @MyId
END
Run Code Online (Sandbox Code Playgroud)
我的主要目标是简单的可维护性(随着业务的变化,很容易删除/添加id),能够在一行中列出所有Id ...性能不应该是一个大问题
据我所知,在SQL Server 2005之前,您可以"欺骗"SQL Server以允许在视图定义中使用顺序,也包括TOP 100 PERCENT在SELECT子句中.但是我已经看到了我继承的其他代码,它们SELECT TOP 100 PERCENT在动态SQL语句中使用...(在 ASP.NET应用程序中用于ADO等).这有什么理由吗?结果不一样,不包括?TOP 100 PERCENT
定义说:
当SET ANSI_NULLS为ON时,即使column_name中存在空值,使用WHERE column_name = NULL的SELECT语句也会返回零行.使用WHERE column_name <> NULL的SELECT语句返回零行,即使column_name中存在非空值也是如此.
这是否意味着此查询中不包含空值?
SELECT Region
FROM employees
WHERE Region = @region
Run Code Online (Sandbox Code Playgroud)
或者ANSI_NULL只关注像这样的查询(其中WHERE包含特定的单词NULL)?
SELECT Region
FROM employees
WHERE Region = NULL
Run Code Online (Sandbox Code Playgroud) 我有一个表管理员,只有一列,adminId是主键.由于业务规则,它必须是这样的.
我想一劳永逸地理解如何编写在这样的表中插入值的存储过程.我正在使用SQL Server和T-SQL并尝试使用SCOPE_IDENTITY(),但这不起作用,因为该表具有INSERT_IDENTITY为false或off.
我真的不想插入一个虚拟值只是为了能够插入一个新行.谢谢!
似乎至少有两种方法可以使用直接T-SQL添加默认约束.我是否正确,下面两者之间的唯一区别是第二种方法专门为约束创建一个名称,第一种方法有一个由SQL Server生成?
ALTER TABLE [Common].[PropertySetting] ADD DEFAULT ((1)) FOR [Active];
ALTER TABLE [Common].[PropertySetting] ADD CONSTRAINT [DF_PropertySetting_Active) DEFAULT ((1)) FOR [Active];
Run Code Online (Sandbox Code Playgroud) 如何在一定范围内查询DateTime数据库字段?
我正在使用SQL SERVER 2005
错误代码如下
SELECT *
FROM TABLENAME
WHERE DateTime >= 12/04/2011 12:00:00 AM
AND DateTime <= 25/05/2011 3:53:04 AM
Run Code Online (Sandbox Code Playgroud)
请注意,我需要在特定时间范围内获取行.例如,10分钟的时间范围.
目前SQL返回"12"附近的语法不正确."