标签: sql-server

如何修改 datetimeoffset 列的精度?

在带有数据的 sql-server 数据库中,我有几个类型为 的列datetimeoffset(7)。现在我想将类型的精度部分更改为datetimeoffset(0).

如果不创建所需类型/精度的新列并重命名该列,这可能吗?

我使用 SQL Server Management Studio 和代码来解决方案(或者说不,这是不可能的)。

sql-server sql-server-2008-r2

1
推荐指数
1
解决办法
788
查看次数

我有一年的库存数据,我想提取每个月数据的第一天和最后一天。做这个的最好方式是什么?谢谢

我有一年的库存数据,我想提取每个月数据的第一天和最后一天。做这个的最好方式是什么?

sql-server

1
推荐指数
2
解决办法
202
查看次数

处理所需的维度是否足够或处理整个多维数据集?

我有四个大维度,其中一个维度不会改变,特定维度也不需要处理。

那么,单独处理三个维度会更新多维数据集,还是我每次都需要处理整个多维数据集(正在处理所有维度)?

sql-server ssas olap cube dimension

1
推荐指数
1
解决办法
1311
查看次数

如何更改 SQL Server 数据库的默认安全性以便每个人都可以使用它?

我的机器上托管了一个数据库,我希望同事能够通过我创建的程序访问和编辑该数据库。

我当前的连接字符串是:

Server=MyMachine;Database=MyDatabase;Integrated Security=True;
Run Code Online (Sandbox Code Playgroud)

为了让另一个用户访问它,我必须:

  1. 在 SQL Server Management Studio 中添加数据库安全下的用户
  2. 在 SSMS 中添加服务器安全下的用户
  3. 运行脚本:

    USE Database
        GRANT SELECT, INSERT, UPDATE, DELETE TO [Username]
    GO
    
    Run Code Online (Sandbox Code Playgroud)

我如何配置它以便我的工作网络上的每个人(或 Windows 用户名以“ MyCompany\”开头的每个人)都可以默认拥有这些权限?这样我就不必手动添加每个新人。

security sql-server permissions ssms

1
推荐指数
1
解决办法
258
查看次数

SQL Server:触发器 FOR DELETE

我想创建一个触发器,它并不如他的名字删除客户Peter。我怎样才能做到这一点?

CREATE TRIGGER trgCUSTOMER ON customer
FOR DELETE
AS
BEGIN
    IF (SELECT name FROM deleted) not like 'Peter'
    BEGIN
        delete from customer where name = (select name from deleted);
    END
END;
Run Code Online (Sandbox Code Playgroud)

trigger sql-server delete

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

插入 [表名] SELECT * FROM [表名]

我刚刚遇到一个查询:

INSERT [TableName] SELECT * FROM [TableName]
Run Code Online (Sandbox Code Playgroud)

请注意,这是同一张表。这个查询导致我的一个测试数据库严重阻塞(我想删除它但不能,这让我调查了这个问题)。

锁类型为 LCK_M_X。我无法终止会话 - 我收到以下消息:

PID 56:事务回滚正在进行中。预计回滚完成:27%。估计剩余时间:5715216 秒。

我不想等待回滚完成估计 2 个月。数据库的事务隔离级别是READ COMMITED。

是否可以终止此会话?如果您在关键任务数据库之一中发现这样的查询,您应该如何行动?

sql-server locking

1
推荐指数
1
解决办法
702
查看次数

轻松修复碎片堆索引的最佳选择是什么?

我在这些服务器上有 SQL Server 2008 R2 SP2 和 SQL Server 2012 SP2。

我有一个数据库,其中有很多堆索引超过 90% 的碎片。

轻松修复这些堆索引的最佳选择是什么?

performance sql-server sql-server-2008-r2 sql-server-2012

1
推荐指数
1
解决办法
1959
查看次数

使用动态 SQL 定位行时出现问题

我一般是 SQL 新手,所以我在设计的一些存储过程中遇到了一些问题。我的程序接受 3 个参数。位置(或表名基本上是 varchar)、房间号 (varchar) 和 'xxx-xxxx' 形式的电话号码 (char)。这是该过程的代码。

ALTER PROCEDURE [dbo].[AddPhoneNumberToRoom]
    @Location    varchar(25),
    @Room        varchar(10),
    @PhoneNumber char(8)

AS
BEGIN
SET NOCOUNT ON;

    DECLARE @String varchar(100);
    SELECT @String = ' UPDATE ' + @Location + 
                     ' SET PhoneNumber = ' + @PhoneNumber +
                     ' WHERE Room = ' + @Room;
    EXEC(@String);
END
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

UPDATE 语句与 FOREIGN KEY 约束“FK_Apartments_PhoneNumbers”冲突。冲突发生在数据库“CMPhone”、表“dbo.PhoneNumbers”、列“PhoneNumber”中。

电话号码在 PhoneNumber 表中,所以当我这样做时:

UPDATE Apartments SET PhoneNumber='123-4567' WHERE Room='2'
Run Code Online (Sandbox Code Playgroud)

它工作得很好。该PhoneNumbers表还看起来是这样的,只是在它的一个数字。

PhoneNumber
-----------
123-4567
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures dynamic-sql t-sql

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

如何将 RELATIONAL 数据分解为 HIERARCHY 数据结构?

我有一个返回以下数据集的查询:

RELATIONid MAPid  D1id   D2id  D3id
4999       4999   626    1250    7 
5000       5000   626    1250    8
Run Code Online (Sandbox Code Playgroud)

对于下一步,我需要将这些数据集绑定到树视图(层次结构)中。我需要将此数据集转换为以下内容:

Nodeid   ParentNodeid  Header
626       null           D1
1250      626            D2
7         1250           D3
8         1250           D3 
Run Code Online (Sandbox Code Playgroud)

我如何从原始数据集中实现这些结构?


我还有一个问题要问,数据结构比前一个复杂(一点点)。假设我有这样的示例数据集:

RELATIONid MAPid  D1id   D2id  D3id
4999       4999   626    1250    7 
5000       5000   626    1250    8
5001       5001   627    1300    10 
5002       5002   627    1300    12 
5003       5003   628    1400    15 
Run Code Online (Sandbox Code Playgroud)

从以下数据集中,我们有 3 个 MainParent:626, 627, 628并且转换(交叉应用)输出期望将是这样的:

Nodeid   ParentNodeid  Header
626       null           D1
1250      626 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server hierarchy

1
推荐指数
1
解决办法
157
查看次数

即使在指定索引提示后,对临时表的选择查询也没有以正确的顺序返回数据

在我的代码中,我使用select * into #tempTable. 临时表包含大量记录,我需要在代码中多次从中检索数据,因此我在其上创建了聚集索引。但不知何故,我没有按照创建的索引以正确的顺序获取数据。

我知道我可以简单地通过放置order by子句来做到这一点,但我的问题是为什么即使我强制优化器使用特定索引,我也没有以正确的顺序获取数据?

下面是我的示例代码:

----------- Sample code ----------------------------

;with CTE1
as (
    select col1
        ,col2
        ,-- - -- - - from table1

    union

    select col1
        ,col2
        ,-- - -- - - from table2
        -- few more tables in union --
    )
    , CTE2
as (
    select *
        ,RowNumber = RowNumber() 
            over (order by case 
                    when @sortOrder = 0
                    then case 
                            when @sortColumn = 'Date'
                            then [tdate]......some more dynamic order by conditions..........
                         end …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

1
推荐指数
1
解决办法
2893
查看次数