我的查询错误,如
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 statement似乎不是执行。存储过程中的代码如下:
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语句?
答案 0 :(得分:1)
通过在存储过程范围之外执行alter语句(即独立),可以更改表以进行正确的排序规则。这只需要做一次。
在存储过程中执行此操作不是正确的地方。每次执行存储过程时都会更改此表列,这是不必要的。如果您以后决定此列必须以其他方式更改,也可能会出现问题;您还必须记住并更改存储过程。这是不可取的。
或者,您指定SQL语句
中所需的排序规则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];