【发布时间】:2017-07-06 08:44:06
【问题描述】:
我的查询有错误
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_100_CS_AS" in the equal to operation.
我知道我可以用这个 SQL 语句解决这个错误:
ALTER TABLE [TableA]
ALTER COLUMN [ColumnX]
VARCHAR(20) COLLATE SQL_Latin1_General_CP1_CI_AS;
我遇到的问题是我有一个存储过程,我在其中添加了 SQL 语句来更改列,然后查询我收到错误,但更改语句似乎没有被执行。存储过程中的代码如下:
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 语句?
【问题讨论】:
-
你知道你可以在 Join 中添加排序规则吗? (见stackoverflow.com/questions/1607560/…)
-
试一试...将
GO放在 ALTER 语句之后并尝试。 -
Etsa,更愿意使用 alter 来消除使用相同字段的后续查询中的类似问题。 Prabhat,我尝试使用 ALTER PROCEDURE 命令添加 GO,但这会产生错误('SQL_Latin1_General_CP1_CI_AS' 附近的语法不正确)
-
@Etsa 奇怪,我试图复制你的场景。它工作正常......
-
Prabhat,你把 GO 放在哪里了?
标签: sql-server stored-procedures