首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSSQL排序规则冲突存储过程

问MSSQL排序规则冲突存储过程
EN

Stack Overflow用户
提问于 2017-07-06 16:44:06
回答 1查看 3.5K关注 0票数 0

我有一个错误的查询,比如

代码语言:javascript
复制
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_100_CS_AS" in the equal to operation.

我知道我可以用下面的SQL语句解决这个错误:

代码语言:javascript
复制
ALTER TABLE [TableA]
ALTER COLUMN [ColumnX]
VARCHAR(20) COLLATE SQL_Latin1_General_CP1_CI_AS; 

我遇到的问题是,我有一个存储过程,其中我添加了SQL语句来更改列,然后查询出现错误,但alter语句似乎没有执行。存储过程中的代码如下:

代码语言:javascript
复制
ALTER TABLE [TableA]
ALTER COLUMN [ColumnX]
VARCHAR(20) COLLATE SQL_Latin1_General_CP1_CI_AS; 

INSERT INTO [TableC] 
([ColumT] )
SELECT 
 [TableB].[Account]
FROM [TableA], [TableB]
WHERE  
 Left(TableA.[ColumnX],1)=TableB.[ColumnY];

如果我单独运行了ALTER和INSERT SQL代码,则INSERT语句可以工作。如果我在一个存储过程中一起运行它们,那么我会得到错误。

为什么存储过程没有运行第一条ALTER SQL语句?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-06 17:29:33

您可以通过在存储过程的作用域(即独立的)之外执行alter语句来更改表,使其具有正确的排序规则。这只需要做一次。

在存储过程中执行此操作并不合适。您可以在每次执行存储过程时更改此表列,这是不必要的。此外,如果您稍后决定必须以另一种方式更改此列,则可能会出现问题;您还必须记住并更改存储过程。这是不可取的。

或者,指定SQL语句中所需的归类

代码语言:javascript
复制
INSERT INTO [TableC] 
    ([ColumT] )
SELECT 
    [TableB].[Account]
FROM 
    [TableA] 
    INNER JOIN [TableB] ON
        LEFT(TableA.[ColumnX],1) COLLATE SQL_Latin1_General_CP1_CI_AS = TableB.[ColumnY];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44943913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档