Справка TSQL (SQL Server 2005) - PullRequest
1 голос
/ 06 мая 2010

Я несколько дней играл с довольно сложным оператором SQL, и большая часть его работала корректно.

У меня проблемы с последней частью, и мне было интересно, может ли кто-нибудь сброситьнемного осветить проблему, поскольку я понятия не имею, почему она не работает:

INSERT INTO ExistingClientsAccounts_IMPORT
SELECT DISTINCT 
cca.AccountID, cca.SKBranch, cca.SKAccount, cca.SKName, cca.SKBase, 
cca.SyncStatus, cca.SKCCY, cca.ClientType, cca.GFCID, cca.GFPID, cca.SyncInput, 
cca.SyncUpdate, cca.LastUpdatedBy, cca.Deleted, cca.Branch_Account, cca.AccountTypeID
FROM         ClientsAccounts AS cca 
INNER JOIN
(SELECT DISTINCT ClientAccount, SKAccount, SKDesc, 
    SKBase, SKBranch, ClientType, SKStatus, GFCID, 
    GFPID, Account_Open_Date, Account_Update
FROM          ClientsAccounts_IMPORT) AS ccai 
ON cca.Branch_Account = ccai.ClientAccount

Ниже приведены определения таблиц:

CREATE TABLE [dbo].[ExistingClientsAccounts_IMPORT](
    [AccountID] [int] NOT NULL,
    [SKBranch] [varchar](2) NOT NULL,
    [SKAccount] [varchar](12) NOT NULL,
    [SKName] [varchar](255) NULL,
    [SKBase] [varchar](16) NULL,
    [SyncStatus] [varchar](50) NULL,
    [SKCCY] [varchar](5) NULL,
    [ClientType] [varchar](50) NULL,
    [GFCID] [varchar](10) NULL,
    [GFPID] [varchar](10) NULL,
    [SyncInput] [smalldatetime] NULL,
    [SyncUpdate] [smalldatetime] NULL,
    [LastUpdatedBy] [varchar](50) NOT NULL,
    [Deleted] [tinyint] NOT NULL,
    [Branch_Account] [varchar](16) NOT NULL,
    [AccountTypeID] [int] NOT NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[ClientsAccounts_IMPORT](
    [NEWClientIndex] [bigint] NOT NULL,
    [ClientGroup] [varchar](255) NOT NULL,
    [ClientAccount] [varchar](255) NOT NULL,
    [SKAccount] [varchar](255) NOT NULL,
    [SKDesc] [varchar](255) NOT NULL,
    [SKBase] [varchar](10) NULL,
    [SKBranch] [varchar](2) NOT NULL,
    [ClientType] [varchar](255) NOT NULL,
    [SKStatus] [varchar](255) NOT NULL,
    [GFCID] [varchar](255) NULL,
    [GFPID] [varchar](255) NULL,
    [Account_Open_Date] [smalldatetime] NULL,
    [Account_Update] [smalldatetime] NULL,
    [SKType] [varchar](255) NOT NULL
) ON [PRIMARY]

Полученное сообщение об ошибке: Msg 8152, уровень 16, Состояние 14, Строка 1 Строка или двоичные данные будут обрезаны.Заявление было прекращено.

Ответы [ 4 ]

3 голосов
/ 06 мая 2010

Ошибка в том, что вы пытаетесь вставить данные в столбец в ExistingClientsAccounts_IMPORT, где размер столбца меньше длины данных, которые пытаются вставить в него.

например. Столбец SKAccount - это VARCHAR (12) в таблице ExistingClientsAccounts_IMPORT, но VARCHAR (255) в ClientsAccounts_IMPORT.

Таким образом, если ClientsAccounts_IMPORT содержит какие-либо строки, в которых это поле длиннее 12 символов, вы получите эту ошибку как obv. например 100 символов не помещаются в поле из 12 символов.

Необходимо убедиться, что все столбцы в таблице, в которую вы вставляете, достаточно большие - убедитесь, что каждое определение столбца соответствует исходной таблице.

0 голосов
/ 06 мая 2010

Вы пытаетесь вставить значения, которые превышают максимальную длину, указанную для столбца. Используйте профилировщик, чтобы проверить данные, передаваемые этому запросу, и проверить длину данных по допустимой длине для всех столбцов.

Существует явное несоответствие в длинах столбцов общих столбцов этих двух таблиц. ClientsAccounts_IMPORT.SKBase равно 10, тогда как в другой таблице 16.

0 голосов
/ 06 мая 2010

Третий столбец вашего списка столбцов SELECT означает, что ExistingClientsAccounts_IMPORT.SKAccount заполняется с ClientsAccounts.SKAccount - однако источник может содержать до 255 символов, а адресат - 12. Если есть какие-либо данные, которые не подходит, вы получите это сообщение.

Я не прошел все остальные столбцы.

0 голосов
/ 06 мая 2010

Проверьте определения полей. Вы можете увидеть, что некоторые меньше оригинальных. Теперь выполните запрос к старым данным - вы обнаружите, что некоторые из более крупных полей были использованы, поэтому вставка невозможна без потери данных.

Пример: SKAccount - от 255 длины до 12.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...