标签: t-sql

82
推荐指数
8
解决办法
7万
查看次数

SQL Server 2008空字符串与空格

今天早上我遇到了一些奇怪的事情,并认为我会提交评论.

有人可以解释为什么以下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中是否就是这种情况,我不再需要测试它.

我遇到了这个,因为生产查询返回了错误的结果.我无法在任何地方找到这种行为.

有没有人有这方面的任何信息?

t-sql sql-server string-length sql-server-2008 datalength

81
推荐指数
4
解决办法
3万
查看次数

将子查询中的多个结果合并为一个逗号分隔值

我有两张桌子:

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是否可行?

t-sql sql-server join

80
推荐指数
4
解决办法
14万
查看次数

来自数据库表的随机记录(T-SQL)

是否有一种简洁的方法从sql server表中检索随机记录?

我想随机化我的单元测试数据,所以我正在寻找一种从表中选择随机id的简单方法.在英语中,select将是"从表中选择一个id,其中id是表中最低id和表中最高id之间的随机数."

我无法找到一种方法来执行它而无需运行查询,测试空值,然后重新运行,如果为null.

想法?

t-sql sql-server random

80
推荐指数
4
解决办法
5万
查看次数

T-SQL:循环遍历已知值的数组

这是我的情景:

假设我有一个存储过程,我需要在一组特定的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 t-sql sql-server

80
推荐指数
5
解决办法
15万
查看次数

为何使用Select Top 100%?

据我所知,在SQL Server 2005之前,您可以"欺骗"SQL Server以允许在视图定义中使用顺序,也包括TOP 100 PERCENTSELECT子句中.但是我已经看到了我继承的其他代码,它们SELECT TOP 100 PERCENT在动态SQL语句中使用...(在 ASP.NET应用程序中用于ADO等).这有什么理由吗?结果不一样,包括?TOP 100 PERCENT

sql t-sql sql-server

80
推荐指数
6
解决办法
13万
查看次数

在SQL Server中,"SET ANSI_NULLS ON"是什么意思?

定义说:

当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)

sql t-sql stored-procedures

80
推荐指数
4
解决办法
10万
查看次数

仅使用一个IDENTITY列将行插入表中

我有一个表管理员,只有一列,adminId是主键.由于业务规则,它必须是这样的.

我想一劳永逸地理解如何编写在这样的表中插入值的存储过程.我正在使用SQL Server和T-SQL并尝试使用SCOPE_IDENTITY(),但这不起作用,因为该表具有INSERT_IDENTITY为false或off.

我真的不想插入一个虚拟值只是为了能够插入一个新行.谢谢!

sql t-sql sql-server stored-procedures

79
推荐指数
1
解决办法
6万
查看次数

用于添加默认约束的命令

似乎至少有两种方法可以使用直接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)

sql t-sql sql-server default-constraint

79
推荐指数
1
解决办法
5万
查看次数

简单的DateTime sql查询

如何在一定范围内查询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"附近的语法不正确."

sql t-sql sql-server sql-server-2005 sql-server-2008

79
推荐指数
4
解决办法
44万
查看次数