我正在使用 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 2012 数据库,我有一个关于一对零或一关系的问题。
我有两张桌子,Codes和HelperCodes。一个代码可以有零个或一个辅助代码。这是创建这两个表及其关系的 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) 我正在开发一个 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]列上设置约束更好?
我正在做一个调查数据库的概念模型。
目标是存储用户给出的答案(它将是一个 Android 应用程序)。
我有三个实体:用户、问题和选项。
一个问题将有一个或多个选项(例如:您有多少员工? 1-40、40-1000、+1000)。
选项将有一个文本 (1-40) 和一个值(用户选择的值)。
用户将选择这些选项中的一个(或多个)。
我的概念设计是:

我不知道如何将答案与用户相关联。
我如何表示这种关系?
我是否有另一个实体来表示期权价值?
该模型将存储问题和预制答案(提供的答案),并允许它们在不同的调查中重复使用。
我必须代表这样的问题:

这个问题与这个问题有关:Survey database design: first version。有错误吗?
我必须用以下问题来代表调查:



研究这些问题组后,我发现了以下规则:
你觉得这些条件OK吗?
有了这些必需品,我设计了以下概念模型(这里我称之为表格而不是调查):

我需要使调查动态。我将重复使用一组问题、问题和/或选项。
我正在设计一个数据库,我想表示用户和组之间的关系:
用户可以属于零个或多个组。一个组可以有一个或多个用户。
我使用 Microsoft Visio 2013 绘制了此图:

是正确的?
我正在开发一个 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 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) 我正在阅读本教程,我对此有疑问。
看这张图片:

'读'的逻辑关系我读到一个Project必须有一个或多个Employee。但是物理实现有一个项目可以有零个或多个ProjectEmployee。
或者也许我错了,物理实现是正确的。
你怎么认为?
我正在使用 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) 我正在 Windows 7 32 位上使用 SQL Server 2012 Enterprise Edition SP2。
\n\n我在存储过程中有这段代码。
\n\nBegin 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\nRun Code Online (Sandbox Code Playgroud)\n\nMyStoredProcedureCLR是一个 SQL CLR 存储过程,用于对 RESTful Web 服务进行 PUT。
有时,我会遇到404 Not Found异常,我想捕获它并记录它。这是我收到的消息:
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) 我刚刚开始使用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 ×7
json ×1
logs ×1
performance ×1
permissions ×1
primary-key ×1
sql-clr ×1
substring ×1
t-sql ×1