将sql脚本分配到变量中



这是我第一次这样做,原因是我希望在使用条件"if"时避免键入相同的sql脚本代码。我的第一个选择是创建一个变量并将"select"语句分配给它,现在取决于另一个变量值,我只会更改"where"条件,但我不会得到常规sql脚本上得到的所有列和行,而是只得到一个单元格,其中的文本分配给了变量。以下是我的代码:

DECLARE @SQLScript varchar(MAX)='' ,
@Subordinate int = 1;
SELECT @SQLScript = N'SELECT * FROM Account
WHERE AccountID = 345015' 
IF @Subordinate = 1 
BEGIN
SELECT @SQLScript =@SQLScript +' AND Status=2 ORDER BY 1 asc' 
END 
ELSE 
BEGIN
SELECT @SQLScript =@SQLScript +' AND Status=1 ORDER BY 2 asc'
END
SELECT @SQLScript

执行上述脚本后,我得到的是1个单元格,显示以下文本"SELECT*Account where AccountID=345015 AND Status=2 group by 1 asc"。我需要的是从脚本中获取表数据

只需使用EXEC()即可执行动态脚本。此外,您还需要将FROM放入您的选择中,使用ORDER BY而不是GROUP BY来排序查询。她是你的更正脚本:

使用EXEC():

Declare 
@SQLScript varchar(max)=''
,@Subordinate int = 1;
Select @SQLScript = N'SELECT * FROM Account
where AccountID = 345015'
if @Subordinate = 1
begin
Select @SQLScript =@SQLScript +' AND Status=2 order by 1 asc'
end
else
begin
Select @SQLScript =@SQLScript +' AND Status=1 order by 2 asc'
end
--select @SQLScript
exec(@SQLScript)

使用CCD_ 5。请注意,不能使用VARCHAR来使用sp_executesql执行查询。必须使用NVARCHAR(或ntextnchar(。

Declare 
@SQLScript NVARCHAR(max)=''
,@Subordinate int = 1;
Select @SQLScript = N'SELECT * FROM Account
where AccountID = 345015'
if @Subordinate = 1
begin
Select @SQLScript =@SQLScript +' AND Status=2 order by 1 asc'
end
else
begin
Select @SQLScript =@SQLScript +' AND Status=1 order by 2 asc'
end
--select @SQLScript
EXECUTE sp_executesql @SQLScript

只需使用

执行sp_executesql@SQLScript

执行查询