我是 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) 中。任何帮助都会很棒。
我有一个看起来像这样的表:
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) 我想创建一个用于存储过程的表类型,但我想确保传递到表中的参数之一是两个值之一。
如果我正确解释了文档,唯一可用的列约束是主键,但如果我错了,请纠正我。
这是我尝试过的:
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)
有人可以解释一下,为什么我收到错误
将 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
我导出了一个表(使用 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) 具有指数的文字的默认数据类型是什么?
例如,文字的默认数据类型是什么 5000E0
具体来说,我需要确保默认值是FLOAT(即FLOAT(53))
如果默认值是REAL(ie FLOAT(24)),那么我担心会添加额外的隐式转换,从而减慢我的查询速度.
我有一台以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) 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 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(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。
我该如何解决?
sql-server-2017 ×10
sql-server ×8
sql ×4
t-sql ×2
bcp ×1
c# ×1
datetime ×1
literals ×1
ssms ×1
types ×1