当将夏威夷报价与字符串函数结合使用时,在T-SQL中有一些奇怪的行为。这里发生了什么?我想念什么吗?其他角色也会遭受同样的问题吗?
SELECT UNICODE(N'?') -- Returns 699 as expected.
SELECT REPLACE(N'"?', '"', '_') -- Returns "?, I expected _?
SELECT REPLACE(N'a?', 'a', '_') -- Returns a?, I expected _?
SELECT REPLACE(N'"?', N'?', '_') -- Returns __, I expected "_
SELECT REPLACE(N'-', N'?', '_') -- Returns -, I expected -
Run Code Online (Sandbox Code Playgroud)
另外,在LIKE例如中使用时很奇怪:
DECLARE @table TABLE ([Name] NVARCHAR(MAX))
INSERT INTO
@table
VALUES
('John'),
('Jane')
SELECT
*
FROM
@table
WHERE
[Name] LIKE N'%?%' -- This returns both records. I expected none.
Run Code Online (Sandbox Code Playgroud) 我最近在 SQL Server 中发现了临时表。我想开始使用这个功能。然而,最大的障碍是无法从中删除记录。由于符合 GDPR,这是绝对必须的。
从历史表中删除记录显然会导致错误:
无法从时态历史表中删除行
因此,为了能够从历史表中删除记录,我必须先禁用SYSTEM_VERSIONING,然后删除,然后重新启用SYSTEM_VERSIONING。除非有另一种我不知道的方式?
由于无法在存储过程/中使用 GO SqlCommand,我如何确保删除历史记录不会干扰其他事务,例如在从历史表中删除记录期间发送到临时表的更新仍将导致记录被添加到历史表?
我尝试创建一个存储过程将它包装在一个事务中,但这失败了,因为ALTER TABLE禁用 的语句SYSTEM_VERSIONING尚未执行,导致相同的错误。
CREATE PROCEDURE [dbo].[OrderHistoryDelete]
(@Id UNIQUEIDENTIFIER)
AS
BEGIN
BEGIN TRANSACTION
ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = OFF )
-- No GO possible here obviously.
DELETE FROM [dbo].[OrderHistory] WITH (TABLOCKX)
WHERE [Id] = @Id
ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[OrderHistory]))
COMMIT TRANSACTION
END
GO
Run Code Online (Sandbox Code Playgroud) 我们有一个私人NuGet饲料。它与Visual Studio. 我们的开发人员通过他们的Azure帐户连接到私人订阅源。在转向 vs 代码时,我想保持相同的功能。
使用此处找到的文档,我将 nuget.config 添加到我的解决方案文件夹中。配置看起来与文档完全一样,只是它在那里有我们的私人提要。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<!-- remove any machine-wide sources with <clear/> -->
<clear />
<!-- add an Azure Artifacts feed -->
<add key="PrivateFeed" value="https://pkgs.dev.azure.com/redacted/_packaging/redacted/nuget/v3/index.json" />
<!-- also get packages from the NuGet Gallery -->
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
</configuration>
Run Code Online (Sandbox Code Playgroud)
有了Visual Studio你只需要登录并可以连接到饲料。vs代码的这个选项在哪里?我目前收到以下错误消息,这是一件好事,因为显然我没有通过身份验证。我期待弹出某种对话框或必须在某处输入我的凭据。据我所知, dotnet restore 命令也没有任何提供凭据的方法。
C:\Program Files\dotnet\sdk\2.1.500\NuGet.targets(114,5): error : Unable to load …Run Code Online (Sandbox Code Playgroud) 我有一个遗留数据库,不能使用两个实体在每个实体中都具有外键属性来进行更改:
EntityOne
ForeignKey1 (pointing to EntityTwo.ForeignKey2)
EntityTwo
ForeignKey2 (pointing to EntityOne.ForeignKey1)
Run Code Online (Sandbox Code Playgroud)
这些外键指向彼此。如何将这种关系与EF6对应?如果不可能,是否有任何解决方法?
我用一个测试数据库进行了测试,该数据库实际上具有一个从EntityOne到EntityTwo的外键关系,另一个从EntityTwo到EntityOne的外键关系,并自动生成模型(首先从数据库获取代码),并没有在两个表之间创建任何关系:
public partial class EntityFrameworkTesting : DbContext
{
public EntityFrameworkTesting()
: base("name=EntityFrameworkTesting")
{
}
public virtual DbSet<EntityOne> EntityOne { get; set; }
public virtual DbSet<EntityTwo> EntityTwo { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
Run Code Online (Sandbox Code Playgroud)
通过一些额外的尝试,我成功地在这些实体之间建立了关系。但是,我必须从POCO类中删除外键属性,才能使用MapKey函数。我仍然想访问外键,但是当再次添加外键属性时,收到一条错误消息:“ ForeignKey2:名称:类型中的每个属性名称都必须是唯一的。属性名称'ForeignKey2'已经定义。” 。
基本上,我正在寻找现在具有的关系功能,但是在POCO类上添加了外键属性。
modelBuilder.Entity<EntityTwo>()
.HasRequired(entity => entity.EntityOne)
.WithRequiredDependent(entity => entity.EntityTwo)
.Map(m => m.MapKey("ForeignKey2"));
Run Code Online (Sandbox Code Playgroud) 我们有一个列,其中JSON数据存储为字符串.读取此JSON数据并通过实现将其转换为IDictionary<string, object>.这一切都正常,直到我想要过滤它.仅在从数据库获取数据后才应用过滤.我们将拥有数百万条记录,因此这是不可接受的.我的过滤器被EF Core完全忽略为WHERE子句,因为它可能不知道如何解析MethodCallExpressions.
我正在寻找一种方法来尽可能接近我在下面使用表达式树的SQL查询.
我需要转换这个:
.Call System.Linq.Queryable.Where(
.Constant<QueryTranslator`1[Setting]>(QueryTranslator`1[Setting]),
'(.Lambda #Lambda1<System.Func`2[Setting,System.Boolean]>))
.Lambda #Lambda1<System.Func`2[Setting,System.Boolean]>(Setting $$it)
{
((System.Nullable`1[System.Int32]).If (
$$it.Value != null && .Call ($$it.Value).ContainsKey("Name")
) {
($$it.Value).Item["Name"]
} .Else {
null
} > (System.Nullable`1[System.Int32]).Constant<Microsoft.AspNet.OData.Query.Expressions.LinqParameterContainer+TypedLinqParameterContainer`1[System.Int32]>(Microsoft.AspNet.OData.Query.Expressions.LinqParameterContainer+TypedLinqParameterContainer`1[System.Int32]).TypedProperty)
== .Constant<System.Nullable`1[System.Boolean]>(True)
}
Run Code Online (Sandbox Code Playgroud)
进入:
SELECT *
FROM [Setting]
WHERE JSON_VALUE([Value], 'lax $.Name') > 1; -- [Value_Name] > 1 is also fine
Run Code Online (Sandbox Code Playgroud)
随着ExpressionVisitor我已经成功地得到尽可能靠近WHERE [超值] ="东西",但字符串这只是工作和键名是缺乏.
我安装了 SSMS 18。我通过从SQL Server Express 2017 安装中选择它来安装一个新的 LocalDB 实例,因为它尚未包含在 SSMS 18 安装中。
安装后,当我尝试使用下面的 SQL 创建数据库时。
CREATE DATABASE Test
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Msg 5123, Level 16, State 1, Line 1
CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file 'C:\Users\brechtTest.mdf'.
Msg 1802, Level 16, State 4, Line 1
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
Run Code Online (Sandbox Code Playgroud)
我注意到但不确定是否相关的一件事是文件路径根本没有意义。缺少反斜杠。
之后我尝试了一个冰雹玛丽并授予每个人对 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14E.LOCALDB\MSSQLServer 的权限。这可以防止在更改服务器选项中的目录时弹出错误。但它并没有解决原来的问题。
奇怪的是,通过 GUI(如下所示)创建数据库没有问题。但是我需要 …
我有一个ExpressionVisitor我添加到 EF Core 的IQueryable<T>. 除了 Include 方法外,一切正常。可能是因为他们强制您IQueryable<T>.Provider成为EntityQueryProvider.
每当我现在尝试包含时,它会导致多个查询,从而导致错误“在上一个操作完成之前在此上下文中启动了第二个操作。不保证任何实例成员都是线程安全的。”。
我如何连接我的,ExpressionVisitor以便它仍然可以与 EF Core 的 Include 功能一起使用?
我的问题与此类似,除了 EF Core 而不是 EF。
我ExpressionVisitor通过在 DbSet 上调用它来连接我的:
return new Translator<TEntity>(
_dbSet
.AsNoTracking());
Run Code Online (Sandbox Code Playgroud)
这是我的Translator课:
public class Translator<T> : IOrderedQueryable<T>
{
private readonly Expression _expression;
private readonly TranslatorProvider<T> _provider;
public Translator(IQueryable source)
{
_expression = Expression.Constant(this);
_provider = new TranslatorProvider<T>(source);
}
public Translator(IQueryable source, Expression expression)
{
if (expression == null) …Run Code Online (Sandbox Code Playgroud) 我有一个表,其中包含一个用作 JSON 的 VARCHAR 列。列中有以下数据:{"Key-Name": "A value."}.
如果我使用 JSON_VALUE 通过下面的查询在此列上进行过滤,我会收到以下错误:“JSON 路径的格式不正确。在位置 5 处发现了意外字符 '-'。”。
SELECT *
FROM [MyTable]
WHERE JSON_VALUE([Value], N'$.Key-Name') = 'A value'
Run Code Online (Sandbox Code Playgroud)
当键中包含特殊字符时,如何使用 JSON_VALUE 函数检索值?
使用私有NuGet提要进行身份验证时,启用自包含发布会导致错误。没有“ --self-contained true”,一切运行正常,出现以下错误。我该怎么解决?
##[section]Starting: Publish
==============================================================================
Task : .NET Core
Description : Build, test, package, or publish a dotnet application, or run a custom dotnet command
Version : 2.154.6
Author : Microsoft Corporation
Help : [Learn more about this task](https://go.microsoft.com/fwlink/?linkid=832194) or [see the .NET Core documentation](https://docs.microsoft.com/dotnet/core/)
==============================================================================
[command]C:\Windows\system32\chcp.com 65001
Active code page: 65001
[command]C:\agent\_work\_tool\dotnet\dotnet.exe publish C:\agent\_work\195\s\redacted.csproj --self-contained true --runtime win-x64 --configuration release --output C:\agent\_work\195\a\redacted
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved. …Run Code Online (Sandbox Code Playgroud) 网上有大量关于如何在像这样的发布管道中替换 JSON 配置文件的资源。我配置了这个。有用。但是,我们也有多个可以访问数据库的集成测试。这些测试在构建期间运行。我还没有看到任何选项来替换构建管道中的配置值。它存在吗?或者我真的必须使用这个自定义任务(见下面的截图)?
azure azure-devops azure-pipelines-build-task azure-pipelines