标签: t-sql

在SQL Server中设置日期

在SQL Server中,如何将DATETIME"置于"第二/分钟/小时/日/年?

假设我的日期是2008-09-17 12:56:53.430,那么地板的输出应该是:

  • 年:2008-01-01 00:00:00.000
  • 月:2008-09-01 00:00:00.000
  • 日:2008-09-17 00:00:00.000
  • 时间:2008-09-17 12:00:00.000
  • 会议纪要:2008-09-17 12:56:00.000
  • 第二名:2008-09-17 12:56:53.000

t-sql sql-server

69
推荐指数
4
解决办法
6万
查看次数

您能解释一下sys.sp_addextendedproperty在以下代码中的用法吗?

在创建视图后,以下代码中发生了什么?你能给我任何想法或路径吗?

此代码取自此处.

/****** Object:  View [dbo].[vProductImages]    Script Date: 04/28/2008 16:59:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[vProductImages]
AS
SELECT        dbo.Products_Images.ProductID, dbo.Images.ThumbUrl, dbo.Images.FullImageUrl
FROM            dbo.Products_Images INNER JOIN
                         dbo.Images ON dbo.Products_Images.ImageID = dbo.Images.ImageID
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties = 
   Begin PaneConfigurations = 
      Begin PaneConfiguration = 0
         NumPanes = 4
         Configuration = "(H (1[40] 4[20] 2[20] 3) )"
      End
      Begin PaneConfiguration = 1
         NumPanes = 3
         Configuration = "(H (1 [50] 4 [25] …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server extended-properties sql-server-2008

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

如何比较可能都为空的值是T-SQL

我想确保我没有在表格中插入重复的行(例如,只有主键不同).我的所有字段都允许NULLS,因为我已经确定null表示"所有值".由于null,我的存储过程中的以下语句不起作用:

IF EXISTS(SELECT * FROM MY_TABLE WHERE 
    MY_FIELD1 = @IN_MY_FIELD1  AND
    MY_FIELD2 = @IN_MY_FIELD2  AND
    MY_FIELD3 = @IN_MY_FIELD3  AND 
    MY_FIELD4 = @IN_MY_FIELD4  AND
    MY_FIELD5 = @IN_MY_FIELD5  AND
    MY_FIELD6 = @IN_MY_FIELD6)
    BEGIN
        goto on_duplicate
    END
Run Code Online (Sandbox Code Playgroud)

因为NULL = NULL不是真的.

如何在没有每列的IF IS NULL语句的情况下检查重复项?

sql t-sql sql-server stored-procedures

68
推荐指数
9
解决办法
9万
查看次数

获取SQL Server上个月的记录

我想根据我的db table [member]字段"date_created"获取上个月的记录.

sql是做什么的?

澄清,上个月 - 2009年1月8日至2009年8月31日

如果今天是2010年3月1日,我需要获取2009年1月12日至2009年12月31日的记录.

sql t-sql sql-server

68
推荐指数
5
解决办法
31万
查看次数

我可以用逗号将多行划分为一列吗?

我试图在我的SQL Server数据库中合并这样的东西:

[TicketID], [Person]
 T0001       Alice
 T0001       Bob
 T0002       Catherine
 T0002       Doug
 T0003       Elaine

进入:

[TicketID], [People]
 T0001       Alice, Bob
 T0002       Catherine, Doug
 T0003       Elaine

我需要在SQL Server和Oracle中执行此操作.

我发现GROUP_CONCATMySQL 的功能完全符合我的需要,但MySQL不是一个选项.

编辑:测试台:

DECLARE @Tickets TABLE (
    [TicketID] char(5) NOT NULL,
    [Person] nvarchar(15) NOT NULL
)

INSERT INTO @Tickets VALUES
    ('T0001', 'Alice'),
    ('T0001', 'Bob'),
    ('T0002', 'Catherine'),
    ('T0002', 'Doug'),
    ('T0003', 'Elaine')

SELECT * FROM @Tickets
Run Code Online (Sandbox Code Playgroud)

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

68
推荐指数
5
解决办法
9万
查看次数

只有在它不存在的情况下才插入一行

我总是使用类似下面的东西来实现它:

INSERT INTO TheTable
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WHERE
        PrimaryKey = @primaryKey)
Run Code Online (Sandbox Code Playgroud)

...但是一旦加载,就会发生主键违规.这是唯一插入此表的语句.那么这是否意味着上述陈述不是原子的?

问题是,这几乎不可能随意重建.

也许我可以将其更改为以下内容:

INSERT INTO TheTable
WITH
    (HOLDLOCK,
    UPDLOCK,
    ROWLOCK)
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WITH
        (HOLDLOCK,
        UPDLOCK,
        ROWLOCK)
    WHERE
        PrimaryKey = @primaryKey)
Run Code Online (Sandbox Code Playgroud)

虽然,也许我使用错误的锁或使用过多的锁定或其他东西.

我在stackoverflow.com上看到了其他问题,其中答案是建议"IF(SELECT COUNT(*)... INSERT"等),但我总是在(可能是不正确的)假设单个SQL语句是原子的.

有没有人有任何想法?

sql t-sql sql-server concurrency locking

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

根据单个不同列选择唯一行

我想选择有a的行distinct email,请参阅下面的示例表:

+----+---------+-------------------+-------------+
| id | title   | email             | commentname |
+----+---------+-------------------+-------------+
|  3 | test    | rob@hotmail.com   | rob         |
|  4 | i agree | rob@hotmail.com   | rob         |
|  5 | its ok  | rob@hotmail.com   | rob         |
|  6 | hey     | rob@hotmail.com   | rob         |
|  7 | nice!   | simon@hotmail.com | simon       |
|  8 | yeah    | john@hotmail.com  | john        |
+----+---------+-------------------+-------------+
Run Code Online (Sandbox Code Playgroud)

期望的结果是:

+----+-------+-------------------+-------------+
| id | title | email …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

68
推荐指数
3
解决办法
13万
查看次数

了解T-SQL中的PIVOT函数

我是SQL新手.

我有这样一张桌子:

ID | TeamID | UserID | ElementID | PhaseID | Effort
-----------------------------------------------------
1  |   1    |  1      |   3       |  5     |   6.74
2  |   1    |  1      |   3       |  6     |   8.25
3  |   1    |  1      |   4       |  1     |   2.23
4  |   1    |  1      |   4       |  5     |   6.8
5  |   1    |  1      |   4       |  6     |   1.5
Run Code Online (Sandbox Code Playgroud)

我被告知要获得这样的数据

ElementID | PhaseID1 | PhaseID5 | PhaseID6
--------------------------------------------
    3     | …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server pivot sql-server-2008

68
推荐指数
4
解决办法
17万
查看次数

T-SQL中的PRINT语句

为什么T-SQL中的PRINT语句似乎有时只能工作?使用它有哪些限制?似乎有时候如果生成了一个结果集,它就变成了一个空函数,我假设它可以防止破坏结果集,但是它的输出是不是可以在另一个结果集中输出,比如行计数?

t-sql sql-server

67
推荐指数
4
解决办法
25万
查看次数

从多列中选择最小值的最佳方法是什么?

给出SQL Server 2005中的下表:

ID   Col1   Col2   Col3
--   ----   ----   ----
1       3     34     76  
2      32    976     24
3       7    235      3
4     245      1    792
Run Code Online (Sandbox Code Playgroud)

编写产生以下结果的查询的最佳方法是什么(即产生最终列的查询 - 包含每行的Col1,Col2和Col3中的minium值的)?

ID   Col1   Col2   Col3  TheMin
--   ----   ----   ----  ------
1       3     34     76       3
2      32    976     24      24
3       7    235      3       3
4     245      1    792       1
Run Code Online (Sandbox Code Playgroud)

更新:

为了澄清(正如我在演讲中所说),在真实场景中,数据库已正确规范化.这些"数组"列不在实际表中,而是在报表中所需的结果集中.新要求是报告还需要此MinValue列.我无法更改基础结果集,因此我期待T-SQL获得一个方便的"走出监狱卡".

我尝试了下面提到的CASE方法并且它有效,尽管它有点麻烦.它也比答案中说明的更复杂,因为你需要满足同一行中有两个最小值的事实.

无论如何,我想我会发布我目前的解决方案,鉴于我的限制,它的效果非常好.它使用UNPIVOT运算符:

with cte (ID, Col1, Col2, Col3)
as
(
    select ID, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 min

67
推荐指数
9
解决办法
20万
查看次数