小编Van*_*nel的帖子

检查用户是否存在于 SQL Server 数据库中

我正在使用 SQL Server 2012。我想在将用户添加到数据库之前检查用户是否存在。

这是我测试过的:

USE [MyDatabase]
GO

IF NOT EXISTS (SELECT name 
                FROM [sys].[server_principals]
                WHERE name = N'IIS APPPOOL\MyWebApi AppPool')
Begin
    CREATE USER [IIS APPPOOL\MyWebApi AppPool] 
    FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Run Code Online (Sandbox Code Playgroud)

但是,SELECT name FROM [sys].[server_principals]如果该用户存在于MyDatabase.

如何检查用户是否存在于MyDatabase

sql-server sql-server-2012

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

空列可以是主键的一部分吗?

我正在开发一个 SQL Server 2012 数据库,我有一个关于一对零或一关系的问题。

我有两张桌子,CodesHelperCodes。一个代码可以有零个或一个辅助代码。这是创建这两个表及其关系的 sql 脚本:

CREATE TABLE [dbo].[Code]
(
    [Id] NVARCHAR(20) NOT NULL, 
    [Level] TINYINT NOT NULL, 
    [CommissioningFlag] TINYINT NOT NULL, 
    [SentToRanger] BIT NOT NULL DEFAULT 0, 
    [LastChange] NVARCHAR(50) NOT NULL, 
    [UserName] NVARCHAR(50) NOT NULL, 
    [Source] NVARCHAR(50) NOT NULL, 
    [Reason] NVARCHAR(200) NULL, 
    [HelperCodeId] NVARCHAR(20) NULL,
    CONSTRAINT [PK_Code] PRIMARY KEY CLUSTERED
    (
        [Id] ASC
    ),
    CONSTRAINT [FK_Code_LevelConfiguration]
       FOREIGN KEY ([Level])
        REFERENCES [dbo].[LevelConfiguration] ([Level]),
    CONSTRAINT [FK_Code_HelperCode]
       FOREIGN KEY ([HelperCodeId])
        REFERENCES [dbo].[HelperCode] ([HelperCodeId])
)

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server-2012

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

NVARCHAR 列作为 PRIMARY KEY 或 UNIQUE 列

我正在开发一个 SQL Server 2012 数据库,我对 nvarchar 列作为主键有疑问。

我有这张桌子:

CREATE TABLE [dbo].[CODES]
(
    [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL,
    [CODE_LEVEL] [tinyint] NOT NULL,
    [CODE] [nvarchar](20) NOT NULL,
    [FLAG] [tinyint] NOT NULL,
    [IS_TRANSMITTED] [bit] NOT NULL DEFAULT 0,
     CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED 
    (
        [CODE_LEVEL] ASC,
        [CODE] ASC
    )
)
Run Code Online (Sandbox Code Playgroud)

但现在我想使用[CODE]列作为主键并删除[ID_CODE]列。

如果我有一个NVARCHAR专栏,有什么问题或惩罚PRIMARY KEY吗?

[CODE]列值必须是唯一的,所以我认为我可以UNIQUE为该列设置约束。

我是否必须用[CODE]作主键,还是UNIQUE[CODE]列上设置约束更好?

sql-server primary-key unique-constraint

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

调查数据库设计:将答案与用户相关联

我正在做一个调查数据库的概念模型。

目标是存储用户给出的答案(它将是一个 Android 应用程序)。

我有三个实体:用户、问题和选​​项。

一个问题将有一个或多个选项(例如:您有多少员工? 1-40、40-1000、+1000)。

选项将有一个文本 (1-40) 和一个值(用户选择的值)。

用户将选择这些选项中的一个(或多个)。

我的概念设计是:

在此处输入图片说明

我不知道如何将答案与用户相关联。

我如何表示这种关系?
我是否有另一个实体来表示期权价值?

该模型将存储问题和预制答案(提供的答案),并允许它们在不同的调查中重复使用。

我必须代表这样的问题:

在此处输入图片说明

这个问题与这个问题有关:Survey database design: first version。有错误吗?

database-design

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

调查数据库设计:第一版。有错误吗?

我必须用以下问题来代表调查:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

研究这些问题组后,我发现了以下规则:

  • 一个调查有问题的团体。
  • 一个问题组有一个名字和问题(所有问题都会有相同数量的选项)。
  • 一个问题有一个问题文本和一组可能的选项来回答它。
  • 一个选项有一个名称和一个类型。
  • 一个类型可以是:文本,是/否或复选框。
  • 一个答案是,用户给出了问题的一个给定的调查选项的值。

你觉得这些条件OK吗?

有了这些必需品,我设计了以下概念模型(这里我称之为表格而不是调查):

在此处输入图片说明

我需要使调查动态。我将重复使用一组问题、问题和/或选项。

database-design

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

如何用鱼尾纹图表示多对多关系

我正在设计一个数据库,我想表示用户和组之间的关系:

用户可以属于零个或多个组。一个组可以有一个或多个用户。

我使用 Microsoft Visio 2013 绘制了此图:

在此输入图像描述

是正确的?

database-design

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

没有前 n 个字符的子串

我正在开发一个 SQL Server 2016 存储过程,我想获取varchar(38)列的最后一个字符。

我知道总会有至少 18 个字符,我不知道列的确切长度,因为它是可变的。

我想我可以得到列的长度并做一个减法来使用SUBSTRING,但我不能这样做,因为我正在这样做:

set @externalCodes = (
    select Serial, AggregationLevel
      from ExternalCode where ProductionOrderId = @productionOrderId
    for json path
Run Code Online (Sandbox Code Playgroud)

我正在生成一个 JSON,但我不知道如何获取Serial选择中每列的长度。

我的问题是:如何在不知道长度的情况下从没有前 18 个字符的字符串中获取子字符串?

一种解决方案可能是:

SUBSTRING(Serial, 18, 38)
Run Code Online (Sandbox Code Playgroud)

并且它总是返回从 18 到字符串末尾的子字符串,即使字符串的长度不是 38。

sql-server t-sql substring sql-server-2016

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

优化两条sql语句添加索引

我正在使用 SQL Server Management Studio 活动监视器优化我的 SQL Server 数据库。

比较贵的两个sql语句是:

set @codesToPrintCount = 
    (select count(CodeId)
        from Code
        where CommissioningFlag = 255
        and AggregationLevelId = @codeLevel);

SET @code = (SELECT TOP 1 Serial
                FROM Code
                WHERE CommissioningFlag = 255
                    and AggregationLevelId = @codeLevel);
Run Code Online (Sandbox Code Playgroud)

这是Code表 sql 脚本:

CREATE TABLE [dbo].[Code] (
    [CodeId]            INT            IDENTITY (1, 1) NOT NULL,
    [Serial]            NVARCHAR (20)  NOT NULL,
    [AggregationLevelId]  TINYINT      NOT NULL,
    [CommissioningFlag] TINYINT        NOT NULL,
    [ ... ]
    CONSTRAINT [PK_CODE] PRIMARY KEY CLUSTERED ([CodeId] …
Run Code Online (Sandbox Code Playgroud)

performance sql-server query-performance

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

这种多对多关系正确吗?

我正在阅读本教程,我对此有疑问。

看这张图片:

在此处输入图片说明

'读'的逻辑关系我读到一个Project必须有一个或多个Employee。但是物理实现有一个项目可以有零个或多个ProjectEmployee

或者也许我错了,物理实现是正确的。

你怎么认为?

database-design

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

从我的数据库授予用户执行 xp_cmdshell

我正在使用 SQL Server 2016,我需要让用户MyDatabase执行xp_cmdshell. 我执行以下操作:

USE [MyDatabase]
GO

GRANT EXECUTE ON xp_cmdshell TO myUser
GO
Run Code Online (Sandbox Code Playgroud)

myUser是一个用户MyDatabase,当我运行上面的代码时,登录为sa,我收到以下错误:

只有当当前数据库是 master 时,才能授予对服务器范围目录视图或系统存储过程或扩展存储过程的权限。

我需要将用户添加到master数据库吗?我不认为这是安全的。

我需要这个,因为我想从存储过程中编写一个文本文件。我找到了以下文章http://www.nigelrivett.net/WriteTextFile.html,说我可以使用以下方法编写文本文件:

You will need to create the data to be output as in dynamic sql statements
The first command here creates or overwrites the file - the rest append to the file.
exec master..xp_cmdshell 'echo hello > c:\file.txt'
exec master..xp_cmdshell 'echo appended data >> c:\file.txt'
exec master..xp_cmdshell …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions

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

xp_logevent 参数类型无效

我正在 Windows 7 32 位上使用 SQL Server 2012 Enterprise Edition SP2。

\n\n

我在存储过程中有这段代码。

\n\n
Begin try\n    -- EXEC CLR Stored Procedure\n    exec dbo.MyStoredProcedureCLR @baseUrl, @orderNumber\nend try\nbegin catch\n    Declare @message nvarchar(max);\n\n    set @message = ERROR_MESSAGE()\n    EXEC master..xp_logevent 60000, @message, informational\nend catch\n
Run Code Online (Sandbox Code Playgroud)\n\n

MyStoredProcedureCLR是一个 SQL CLR 存储过程,用于对 RESTful Web 服务进行 PUT。

\n\n

有时,我会遇到404 Not Found异常,我想捕获它并记录它。这是我收到的消息:

\n\n
A .NET Framework error occurred during execution of user-defined routine or aggregate "GetNewCodesICODECLR": \nSystem.Net.WebException: Error en el servidor remoto: (404) No se encontr\xc3\xb3.\nSystem.Net.WebException: …
Run Code Online (Sandbox Code Playgroud)

sql-server logs sql-clr

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

使用 OPENJSON 生成嵌套数组非常慢

我刚刚开始使用OPENJSONSQL Server 2016 SP1。

我有这句话:

select c.Serial as Parent,
    (Select co.Serial, agc.Position
      from AggregationChildren agc, Aggregation ag, Code co
      where agc.AggregationId = a.AggregationId 
      and co.CodeId = agc.AggregationChildrenId for json path) as children
    from Aggregation a, Code c
    where c.CodeId = a.AggregationId for json path
Run Code Online (Sandbox Code Playgroud)

要生成此 JSON:

select c.Serial as Parent,
    (Select co.Serial, agc.Position
      from AggregationChildren agc, Aggregation ag, Code co
      where agc.AggregationId = a.AggregationId 
      and co.CodeId = agc.AggregationChildrenId for json path) as children
    from Aggregation a, Code c …
Run Code Online (Sandbox Code Playgroud)

sql-server json

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