Выражение не-булева типа, указанное в контексте, где ожидается условие, около 'tblProje' - PullRequest
0 голосов
/ 10 октября 2018

Я получаю это сообщение об ошибке при выполнении этого оператора sql в ssms:

Выражение не-логического типа, указанное в контексте, где ожидается условие, рядом с 'tblProje'

Это само утверждение:

PRINT 'Updating FileSetId data from Table Project to Table tblProject'
DECLARE @SQL NVARCHAR(100)
SET @SQL = 'UPDATE  tblProject set tblProject.ProjectFileSetId = Project.FileSetId
FROM Project
WHERE tblProject.AccountingProject = Project.Project_Id'
IF EXISTS(select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Project' AND COLUMN_NAME = 'FileSetId')
BEGIN
execute sp_executesql @SQL
END
GO

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

1 Ответ

0 голосов
/ 10 октября 2018

Если вы возьмете свой запрос и посмотрите на длину, вы увидите проблему:

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'UPDATE  tblProject set tblProject.ProjectFileSetId = Project.FileSetId
FROM Project
WHERE tblProject.AccountingProject = Project.Project_Id'

select len(@sql)

select len('UPDATE  tblProject set tblProject.ProjectFileSetId = Project.FileSetId
FROM Project
WHERE tblProject.AccountingProject = Project.Project_Id')

При назначении переменной в конце вырежется 41 символ, поэтому при запуске вы не сможете выполнить SQLзапустить sp_executesql.Измените вашу переменную на что-то вроде NVARCHAR(4000) или NVARCHAR(MAX), и она будет работать.

PRINT 'Updating FileSetId data from Table Project to Table tblProject'
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'UPDATE  tblProject set tblProject.ProjectFileSetId = Project.FileSetId
FROM Project
WHERE tblProject.AccountingProject = Project.Project_Id'
IF EXISTS(select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Project' AND COLUMN_NAME = 'FileSetId')
BEGIN
execute sp_executesql @SQL
END
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...