Хотя другие предлагали обходные пути, которые достигают, по-видимому, желаемого конечного результата, вот фактическая причина, по которой вы получаете ошибку, в случае, если вы хотели спросить:
Вы пытаетесь сделатьдинамический SQL-запрос внутри динамического SQL-запроса, но вы делаете это только наполовину.
Если бы вы напечатали @str вместо его выполнения, вы увидите:
DECLARE @where VARCHAR(max)=''''
IF 1>2
BEGIN
SET @where='' Test_Group_Id=1''
END
ELSE
BEGIN
SET @where='' Party_Master_Id=1''
END
SELECT * FROM dbo.Party_Details WHERE 1=1 and @where
КодВНУТРИ @str
не предпринимает никаких попыток заменить @where
значением @where
при окончательном выборе.
Чтобы полностью выполнить динамический запрос внутри динамического запроса, необходимо выполнитьвся строка-конкат плюс EXEC.Так что это будет работать:
DECLARE @str VARCHAR(MAX)=''
SET @str='
DECLARE @where VARCHAR(max)=''''
DECLARE @str2 varchar(max)
IF 1>2
BEGIN
SET @where='' Test_Group_Id=1''
END
ELSE
BEGIN
SET @where='' Party_Master_Id=1''
END
SET @str2 = ''SELECT * FROM dbo.Party_Details WHERE 1=1 and '' + @where
EXECUTE(@str2)
';
EXECUTE(@str)