используйте это вместо этого (один SELECT
отсутствует, таким образом, сообщение об ошибке):
'SELECT * FROM
(SELECT [CaseID],
( select
Attr.AttributeValue
from
[dbo].[CV_CaseAttributes] Attr
Where Attr.CaseID = C.CaseID ANd Attr.AttributeID = @AttributeID
) AS CaseTitle
,[UserID]
FROM [dbo].[CaseMaster] C
WHERE SpaceID = @sid
)
AS Details'
РЕДАКТИРОВАТЬ - согласно комментариям:
try
DECLARE @sidV UNIQUEIDENTIFIER , @AttributeIDV UNIQUEIDENTIFIER
SET @sidV = 'c0b5956b-47f2-4ad6-bb9a-67a5a249e4b7'
SET @AttributeIDV = 'F1A0D9D6-702E-4492-9EBC-63AD22E60E6A'
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT * FROM
(select [CaseID],
( select
Attr.AttributeValue
from
[dbo].[CV_CaseAttributes] Attr
Where Attr.CaseID = C.CaseID ANd Attr.AttributeID = @AttributeID
) AS CaseTitle
,[UserID]
FROM [dbo].[CaseMaster] C
WHERE SpaceID = @sid
)
AS Details'
EXEC sp_executesql @sql
,N'@sid UNIQUEIDENTIFIER,@AttributeID UNIQUEIDENTIFIER'
,@sid=@sidV,@AttributeID =@AttributeIDV
РЕДАКТИРОВАТЬ - согласно комментариям «объяснение»:
Я не эксперт по SQL Server, поэтому, пожалуйста, примите следующие предположения:
Мне кажется, что анализатор видит вещи, стоящие за EXEC
как новая сфера.Таким образом, при разрешении переменных по имени он сначала проверяет в области действия EXEC
и, не найдя того, что ищет, расширяет поиск до окружающей области.
В случае исходного утверждения у нас было 2 переменныеназван одинаково в обеих областях (снаружи и внутри EXEC
) - это приводит к некоторой проблеме при решении проблем во время выполнения кода внутри EXEC
и, таким образом, к неиспользованию объявленных переменных извне EXEC
.
При изменении имен на уникальные для обеих областей анализатор больше не сталкивался с этими проблемами ...