相关疑难解决方法(0)

表达式中的类型转换可能会影响“CardinalityEstimate”——在计算列上?

我看了一下这个问题:

表达式中的类型转换可能会影响查询计划选择中的“CardinalityEstimate”?

但这与整理有关,而不是与计算列有关。

我在下面的查询中使用了以下表定义,它给了我一个查询提示

表达式中的类型转换 (CONVERT(varchar(10),[t].[FLTCD_FLT_DATE],112)) 可能会影响查询计划选择中的“CardinalityEstimate”

在此处输入图片说明

请注意计算列 flightReference

CREATE TABLE [dbo].[repl_Transportation] ( 
[FLIGHT#]          INT                              NOT NULL,
[FLTCD_FLT_DATE]   DATETIME                             NULL,
[FLTCD_DEP_GATE]   CHAR(3)                              NULL,
[FLTCD_ARR_GATE]   CHAR(3)                              NULL,
[FLTCD_SEQUENCE]   CHAR(1)                              NULL,
[DIRECTION]        CHAR(1)                              NULL,
[PNR_NUMBERS]      VARCHAR(70)                          NULL,
[HK]               NUMERIC(3,0)                         NULL,
[Create_Date]      DATETIME                         NOT NULL,
[Modify_Date]      DATETIME                             NULL,
[flightReference]  AS (substring(((CONVERT([varchar](10),[FLTCD_FLT_DATE],
 (112))+[FLTCD_DEP_GATE])+[FLTCD_ARR_GATE])+[FLTCD_SEQUENCE],(3),(13))) PERSISTED,
CONSTRAINT   [PK_FLIGHT#]  PRIMARY KEY CLUSTERED    ([FLIGHT#] asc))



IF OBJECT_ID('[dbo].[repl_Transportation_Details]') IS NOT NULL 
DROP TABLE [dbo].[repl_Transportation_Details] 
GO
CREATE TABLE [dbo].[repl_Transportation_Details] ( 
[FLT_LEG_ID]     INT                              NOT NULL,
[FLIGHT#]        INT                              NOT NULL,
[LEG_NO]         TINYINT …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization sql-server-2016 computed-column cardinality-estimates

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

运行动态 sql FOR XML PATH 时的排序规则冲突

运行以下查询时,我收到以下错误消息:

无法解决 equal to 操作中“Latin1_General_CI_AS”和“Latin1_General_BIN”之间的排序冲突

此查询工作正常,基本上为我提供了在当前数据库中创建用户的脚本。

为了在当前服务器中的所有(或选择)数据库中运行查询,我通过动态 SQL 和 XML PATH 完成了它。

问题是,当我取消注释下面脚本的 XML 部分时,出现上面的错误。

我不是在所有服务器中都收到此错误。有些服务器工作正常,有些则陷入困境。

我希望此查询可以在所有服务器中运行,而与服务器排序规则无关。

我怎样才能做到这一点?

DECLARE @sql NVARCHAR(MAX)
DECLARE @ParamDefinition NVARCHAR(MAX)

    DECLARE  @log NVARCHAR(MAX)
            ,@vCrlf CHAR(2);

    SELECT  @log = ''
           ,@vCrlf = CHAR(13)+CHAR(10);



SELECT @SQL = '
--==========================================
-- creating the users
--==========================================

select  db = db_name(),
         _login=[master].[sys].[server_principals].[name],
         role_= null,
         obj=null,
        Permission= null,
        [script]=
''CREATE USER [''       
 + [sys].[database_principals].[name] + '']'' + '' FOR LOGIN ['' + [master].[sys].[server_principals].[name] + '']'' 

from [sys].[database_principals] INNER JOIN [master].[sys].[server_principals]
on [sys].[database_principals].[name]=[master].[sys].[server_principals].[name] …
Run Code Online (Sandbox Code Playgroud)

xml sql-server collation permissions dynamic-sql

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