标签: t-sql

将多个服务器登录映射到一个数据库用户

这似乎是一个愚蠢的问题,但尽管进行了一些研究,但我无法仅找到有关此的任何信息(可能是由于使用了错误的术语)。

是否可以将多个服务器登录(sql server 身份验证)记录到单个数据库用户(具有通过成为数据库角色成员分配的权限)?

我有几十个 sql 登录(sql server 身份验证),它们需要从中央数据库读取一个设置,我宁愿将所有这些登录都映射到目标数据库中的单个 DB 用户,而不是为每个登录创建一个自己的 DB 用户。

如果是,那么正确的 T-SQL 语法是什么?

sql-server permissions t-sql

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

在时态数据库设计中确保唯一条目的正确方法是什么?

我在设计时态数据库时遇到问题。我需要知道如何确保在商店的任何给定时间范围内我只有一个活动记录。我已经阅读了这个答案,但恐怕我无法理解触发器的工作原理。特别是,我如何将触发器工作到我现有的触发器中,以防止更新记录,而是插入新记录。我真正的问题是,当完成日期为空时,我不知道如何防止 Store 有多个生效日期。(即防止商店的 2 个活动记录)。

这就是我所拥有的,但它允许我为具有不同生效日期的商店插入新记录。

表定义:

/****** Object:  Table [PCR].[Z_STORE_TEAM]    Script Date: 05/09/2014 13:05:57 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U'))
DROP TABLE [Z_STORE_TEAM]
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U'))
BEGIN
CREATE TABLE [Z_STORE_TEAM](
    [STORENUM] [int] NOT NULL,
    [TEAM] [varchar](10) NULL,
    [EFFECTIVE] [date] NOT NULL,
    [FINISHED] [date] NULL,
PRIMARY KEY CLUSTERED 
(
    [STORENUM] ASC,
    [EFFECTIVE] ASC
)WITH (PAD_INDEX  = …
Run Code Online (Sandbox Code Playgroud)

trigger database-design sql-server t-sql

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

在 SQL Server 中有效地从表中删除大量行

我有一张有点失控的桌子。我本身不是 DBA,但似乎记得一次性删除大量行会导致事务日志问题,在删除过程中妨碍整体系统性能等......

有没有一种有效的方法可以让我创建一个小批量删除记录以过度阻碍其他访问/性能并防止事务日志出现问题的作业?

这个过程可能会很慢,这会有所不同

对于其他上下文,删除条件将基于诸如...之类的内容where x like '%blah%'。此外,还有 1 个聚集索引和 5 个非聚集索引。

sql-server delete t-sql jobs

11
推荐指数
2
解决办法
6万
查看次数

如何在 SQL Server 2012 中为 RAISERROR 函数在 varchar @params 中转义“%”

我应该如何转义%参数中的字符,以便我重新调整RAISERROR我的消息

declare @msg varchar(max)  = (SELECT ' Message with %  ' AS MSG)

if @msg is not null
begin
    RAISERROR (@msg ,16,1); 
end
Run Code Online (Sandbox Code Playgroud)

这将引发错误消息

消息 2787,级别 16,状态 1,第 4 行
无效的格式规范:“%”。

对于最终用户,此消息是不可读的。

我的消息是从数据库生成并设置此消息。

我避免收到错误消息的方法是替换

set @msg = REPLACE(@msg,'%','P')
Run Code Online (Sandbox Code Playgroud)

但是我还是不知道怎么加%符号

sql-server t-sql raiserror

11
推荐指数
2
解决办法
9771
查看次数

无法镜像数据库 SQL Server 2012

尝试使用以下命令镜像数据库时

ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

消息 1475,级别 16,状态 105,第 1 行
数据库“test0916aj8CJ”可能包含尚未备份的批量记录更改。在主体数据库或主数据库上进行日志备份。然后在镜像数据库上还原此备份以启用数据库镜像,或在每个辅助数据库上还原此备份以使其能够加入可用性组。

这可以在不支持数据库的情况下完成吗?或者我应该备份然后丢弃备份。它用于新创建的数据库,因此此时我不需要备份。

我尝试了以下...

BACKUP
DATABASE [test0916aj8CJ] TO DISK = N’NUL’
WITH COPY_ONLY, NOFORMAT, INIT,
NAME = N’test-Full Database Backup’,
SKIP, NOREWIND, NOUNLOAD
GO
Run Code Online (Sandbox Code Playgroud)

但上述方法也不起作用。

谢谢

sql-server t-sql alter-database

11
推荐指数
2
解决办法
4705
查看次数

'Id' 格式为:YYYYNNNNNN,NNNNNN 部分每年重新开始

我有一个业务需求,即发票表中的每条记录都有一个看起来像 YYYYNNNNNN 的 ID。

NNNNNN 部分需要在每年年初重新启动。所以 2016 年输入的第一行看起来像 2016000001,第二行看起来像 2016000002 等等。假设 2016 年的最后一条记录是 2016123456,下一行(2017 年)应该看起来像 2017000001

我不需要这个 id 作为主键,我也存储创建日期。这个想法是这个'显示ID'是独一无二的(所以我可以通过它查询)并且可以按年份进行分组。

不太可能删除任何记录;但是,我倾向于防御性地编写代码以防止类似的事情。

有什么方法可以创建这个 id 而不必在每次插入新行时查询今年的最大 id?

想法:

  • A CreateNewInvoiceSP,它获取MAX那一年的值(令人讨厌)
  • 一些神奇的内置功能可以做到这一点(我可以做梦)
  • 能够在IDENTITYorDEFAULT声明中指定一些 UDF 或其他内容(??)
  • 使用的视图PARTITION OVER + ROW()(删除会出现问题)
  • 一个触发器INSERT(仍然需要运行一些MAX查询:()
  • 一年一度的后台工作,更新了一张表格,其中插入了每年的 MAX,然后我......什么?!

所有这些都有些不理想。欢迎任何想法或变化!

sql-server t-sql

11
推荐指数
2
解决办法
4694
查看次数

使用 CEILING 时 CASE 表达式返回错误值

我遇到了一个问题,即CASE表达式没有返回我期望的内容。

作为测试,我添加了一个十进制变量并CASE针对它运行了相同的表达式,它运行良好,返回了我预期的结果(在 时将值向上舍入IsGun=1。但是当我CASE针对另一个十进制值运行相同的表达式时,它总是返回CEILING()函数的值,从不返回原始值。

这是SQL代码:

DECLARE @Num decimal(8,2);
    set @Num = 12.54;
    WITH PQ AS
    ( 
        SELECT 
            UPC, 
            Price1, 
            DBID,
            AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg
        FROM
            vProducts_PriceQty_Union
    )
    SELECT 
        PQ.UPC,
        PQ.Price1,
        PQ.Price1Avg,
        (CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar,
        CAST(
            (CASE WHEN P.IsGun = 1 THEN CEILING(PQ.Price1Avg) ELSE PQ.Price1 END)
             AS NUMERIC(8,2))
        AS PriceAdj,
        PQ.DBID,
        P.IsGun
    FROM
        PQ
     INNER JOIN
        products P …
Run Code Online (Sandbox Code Playgroud)

sql-server datatypes t-sql type-conversion

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

可以参与 SET 操作的局部变量的最大数量是多少?

我有一个包含业务逻辑的存储过程。在它里面我有大约 1609 个变量(不要问我为什么,这就是引擎的工作原理)。我尝试将SET一个变量连接到所有其他变量的连接值。结果在创建过程中出现错误:

消息 8631,级别 17,状态 1,过程 XXX,行 YYY 内部错误:已达到服务器堆栈限制。请在您的查询中寻找潜在的深层嵌套,并尝试简化它。

我发现错误是由于我需要在SET操作中使用的变量数量。我可以通过将其一分为二来执行任务。

我的问题是这方面有一些限制吗?我查了查,但没有找到。

我们检查了此 KB 中描述的错误,但这不是我们的情况。我们不在CASE代码中使用任何表达式。我们使用该临时变量来准备必须使用 CLR 函数替换的值列表。我们将 SQL Server 更新为 SP3 CU6(最新的),但我们仍然遇到错误。

sql-server t-sql database-internals sql-server-2012 errors

11
推荐指数
2
解决办法
2783
查看次数

如何在标准 SQL 或 T-SQL 中生成 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, ... 系列?

给定两个数字nand m,我想生成一系列的形式

1, 2, ..., (n-1), n, n, (n-1), ... 2, 1
Run Code Online (Sandbox Code Playgroud)

并重复它m几次。

例如,对于n = 3and m = 4,我想要以下 24 个数字的序列:

1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1
----------------  ----------------  ----------------  ----------------
Run Code Online (Sandbox Code Playgroud)

我知道如何通过以下两种方法之一在 PostgreSQL 中实现此结果:

使用以下查询,该查询使用该generate_series函数,以及一些确保订单正确的技巧:

WITH parameters (n, m) AS
(
    VALUES (3, 5)
)
SELECT 
    xi
FROM
(
    SELECT
        i, i …
Run Code Online (Sandbox Code Playgroud)

postgresql sql-server t-sql functions

11
推荐指数
4
解决办法
7402
查看次数

如何将 HTML 代码读取为 XML 并像 sql 中的示例一样获得输出?

我在数据库中存储了 HTML 代码,我想将其作为 XML 读取。

我的代码:

http://rextester.com/RMEHO89992

这是我拥有的 HTML 代码示例:

<div>
  <section>
       <h4>
         <span> A </span>
        </h4>
        <ul>
           <li>
              <span> Ab</span>
                     AD
              <span> AC </span>
           </li>
           <li>
              <span> Ag</span>
              <span> AL </span>
           </li>
        </ul>
        <h4>
              <span> B </span>
       </h4>
       <ul>
           <li>
              <span> Bb</span>
                     BD
              <span> BC </span>
           </li>
           <li>
              <span> Bg</span>
              <span> BL </span>
           </li>
        </ul>
   </section>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我需要的输出示例:

Category         Selection        Value                    
---------        ---------        ------------             
A                Ab               AD                  
A                Ag               AL                       
B                Bb               BD                   
B                Bg               BL                       
Run Code Online (Sandbox Code Playgroud)

我需要将<h4>标签内的值作为 …

xml sql-server t-sql

11
推荐指数
2
解决办法
3855
查看次数