我有一个错误的查询,比如
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语句似乎没有执行。存储过程中的代码如下:
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语句?
发布于 2017-07-06 17:29:33
您可以通过在存储过程的作用域(即独立的)之外执行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];https://stackoverflow.com/questions/44943913
复制相似问题