标签: sql-server-2017

无法将值 NULL 插入 X 列,X 列不允许为空。插入失败。

我是 SQL Server 的新手,我收到此错误“无法将 NULL 值插入列 'Occupied',表 'DBProjectHamlet.dbo.tblGrave';列不允许空值。插入失败。语句已终止。”

这是我的插入代码,然后是创建表的代码

INSERT INTO tblGrave (GraveName)
SELECT Grave
FROM tblPlotsandOccupants


IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tblGrave' AND TABLE_SCHEMA = 'dbo')
    DROP TABLE dbo.tblGrave;
    GO
CREATE TABLE tblGrave
(
GraveID INT IDENTITY (1,1),
GraveName VARCHAR(MAX) NULL,
GraveTypeID INT NOT NULL,
PlotID INT NOT NULL,
Occupied BIT NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

我不想在 Occupied 列中插入任何内容,我不知道为什么会发生这种情况或如何解决它。我只想将值插入到 tblGrave (GraveName) 中。任何帮助都会很棒。

sql sql-server-2017

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

如何更改 ssms 2017 中的参考高亮颜色?

在 ssms2017 文本编辑器中,当您单击某些单词(变量/字段/表名..etc)时,其他相同的单词会突出显示,但是这种颜色不够突出,我想更改它,但我无法在工具中找到该项目>选项>字体和颜色。

在此处输入图片说明

sql-server ssms sql-server-2017

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

LAG/OVER/PARTITION/ORDER BY使用条件 - SQL Server 2017


我有一个看起来像这样的表:

Date            AccountID       Amount
2018-01-01      123             12
2018-01-06      123             150
2018-02-14      123             11
2018-05-06      123             16
2018-05-16      123             200
2018-06-01      123             18
2018-06-15      123             17
2018-06-18      123             110
2018-06-30      123             23
2018-07-01      123             45
2018-07-12      123             116
2018-07-18      123             60
Run Code Online (Sandbox Code Playgroud)

此表具有多个日期和ID,以及多个金额.对于每一行,我想抓住最后一个日期,其中金额超过该特定AccountID的特定值.我一直试图将LAG(Date,1)与CASE和OVER(PARTITION BY AccountID ORDER BY Date)语句的几个变量组合使用,但我没有运气.最终,这就是我希望我的SELECT语句返回的内容.

Date            AccountID       Amount          LastOverHundred
2018-01-01      123             12              NULL
2018-01-06      123             150             2018-01-06
2018-02-14      123             11              2018-01-06
2018-05-06      123             16              2018-01-06
2018-05-16      123             200             2018-05-16
2018-06-01      123             18              2018-05-16
2018-06-15      123             17              2018-05-16
2018-06-18      123 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2017

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

带有检查约束的用户定义表类型

我想创建一个用于存储过程的表类型,但我想确保传递到表中的参数之一是两个值之一。

如果我正确解释了文档,唯一可用的列约束是主键,但如果我错了,请纠正我。

这是我尝试过的:

create type dealerDisable as table
(id int not null,
dealerNo varchar(10) not null,
dealerName varchar(50),
disabling varchar(5),
constraint ratesOrAll 
check (disabling in ('Rates','All')),
dateAdded date)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误,并不是那么有启发性: 在此处输入图片说明

t-sql sql-server sql-server-2017

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

为什么我的日期时间转换超出了 999 毫秒的范围?

有人可以解释一下,为什么我收到错误

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

当我在 SQL Server 2017 上执行以下代码时。我只收到 0.999 毫秒的错误

SELECT CAST('9999-12-31 23:59:59.999' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

结果:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

然后我尝试:

SELECT CAST('9999-12-31 23:59:59.998' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

结果:9999-12-31 23:59:59.997

然后我尝试:

SELECT CAST('9999-12-31 23:59:59.997' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

结果:9999-12-31 23:59:59.997

sql-server datetime sql-server-2017

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

`bcp in` 失败并显示“插入失败,因为以下 SET 选项设置不正确:'QUOTED_IDENTIFIER'”

我导出了一个表(使用 EF Core 2.2 创建)bcp %database%.MyTable out MyTable.dmp -n -T -S %sqlserver%

在重新导入它时,bcp %database%.MyTable in MyTable.dmp -n -T -S %sqlserver%我收到此错误:

SQLState = 37000, NativeError = 1934
Error = [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]INSERT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations. …
Run Code Online (Sandbox Code Playgroud)

sql-server bcp sql-server-2017

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

SQL Server:具有指数的文字的默认数据类型是什么?

具有指数的文字的默认数据类型是什么?

例如,文字的默认数据类型是什么 5000E0

具体来说,我需要确保默认值是FLOAT(即FLOAT(53))

如果默认值是REAL(ie FLOAT(24)),那么我担心会添加额外的隐式转换,从而减慢我的查询速度.

sql sql-server types literals sql-server-2017

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

兼容模式是否允许新命令?

我有一台以2012兼容模式运行数据库的SQL Server 2017服务器。但是,当我尝试使用2017 T-SQL的新命令时string_agg(),它可以工作。我预计会出现语法错误,因为string_agg()对于2012模式无效。

这是我正在使用的SQL:

SELECT
    Compatibility_Level,
    CASE Compatibility_Level
       WHEN 65 THEN 'SQL Server 6.5'
       WHEN 70 THEN 'SQL Server 7.0'
       WHEN 80 THEN 'SQL Server 2000'
       WHEN 90 THEN 'SQL Server 2005'
       WHEN 100 THEN 'SQL Server 2008/R2'
       WHEN 110 THEN 'SQL Server 2012'
       WHEN 120 THEN 'SQL Server 2014'
       WHEN 130 THEN 'SQL Server 2016'
       WHEN 140 THEN 'SQL Server 2017 <<<'
       ELSE 'new unknown - ' + CONVERT(VARCHAR(10), Compatibility_Level)
    END AS VersionName
FROM …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2012 sql-server-2017

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

更新不存在的表变量

UPDATE 
    @Customer
SET 
    ValidaitonAction = 1
WHERE NOT EXISTS
    (SELECT 1 FROM DMScustomerupload WHERE AccountNumber = @Customer.AccountNumber)
Run Code Online (Sandbox Code Playgroud)

@CustomerTABLE变量在哪里:

DECLARE @Customer TABLE ( ID int,
                        ValidaitonAction int,
                        ... other columns))
Run Code Online (Sandbox Code Playgroud)

在最后一行,我得到

必须声明标量变量@Customer

sql sql-server sql-server-2017

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

尝试从 .net core dll 创建程序集时出现 SQL Server 错误

我正在尝试从 SQL Server 2017 中的 .NET Core dll 创建程序集:

CREATE ASSEMBLY my_assembly 
FROM 'C:\Temp\MyDll.dll' WITH PERMISSION_SET = SAFE;
Run Code Online (Sandbox Code Playgroud)

这是 dll csproj :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <PlatformTarget>x64</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.SqlManagementObjects" Version="161.46041.41" />
  </ItemGroup>   
  
</Project>
Run Code Online (Sandbox Code Playgroud)

当我运行查询时,出现以下错误:

程序集“MyAssembly”引用程序集“system.runtime, version=4.2.2.0,culture=neutral, publickeytoken=b03f5f7f11d50a3a.”,当前数据库中不存在该程序集。SQL Server 尝试从引用程序集来自的同一位置定位并自动加载引用程序集,但该操作失败(原因:2(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。

我该如何解决?

c# .net-assembly sql-server-2017 .net-core-3.1

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