象下面这段sql语句:
declare @strSQL nvarchar(1000)
declare @strSQLDef nvarchar(1000)
select @strSQL='
SELECT [QuotationItemID]
,[QuoteID]
,[ProductIdName]
,[PricePerUnit]
,[Tax]
,[Quantity]
,[ProductDescription]
FROM [AaronDB].[dbo].[QuoteDetail]
order by @SortColumn @SortDirection
'
select @strSQLDef='@SortColumn nvarchar(50),@SortDirection nvarchar(20)'
print @strsql
exec sp_executesql @strSQL,@strSQLDef,'QuotationItemID','DESC'
报错:Incorrect syntax near '@SortDirection'.
像上面的这段sql,我想用参数的方式来执行列的排序,我该怎么做呢?(不想要那种字符串拼凑的办法)
这个问题第1个回答:
SQL code
declare @strSQL nvarchar(1000)
declare @SortColumn nvarchar(50),@SortDirection nvarchar(20)
select @SortColumn = 'QuotationItemID',@SortDirection 'DESC'
select @strSQL='
SELECT [QuotationItemID]
,[QuoteID]
,[ProductIdName]
,[PricePerUnit]
,[Tax]
,[Quantity]
,[ProductDescription]
FROM [AaronDB].[dbo].[QuoteDetail]
order by '+@SortColumn+' '+@SortDirection
exec sp_executesql @strSQL
这个问题第2个回答:
顶
这个问题第3个回答:
接分
这个问题第4个回答:
帮顶 ,接分
这个问题第5个回答:
是也
这个问题第6个回答:
像上面的这段sql,只有 拼接SQL字符串 然后执行
传递参数不行
要么就写一个存储过程 传递 字段名 与 排序规则进去
在纯属过程里拼接字符串 执行动态SQL 语句
这个问题第7个回答:
jf
这个问题第8个回答:
用动态SQL语句。
动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sql nvarchar(4000)
set @sql='select count(*) from tableName'
exec(@sql)
--如何将exec执行结果放入变量中?
declare @num int, @sql nvarchar(4000)
set @sql='select @a=count(*) from tableName '
exec sp_executesql @sql,N'@a int output',@num output
select @num
这个问题第9个回答:
美好的CSDN
这个问题第10个回答:
SQL code
declare @strSQL nvarchar(1000)
declare @SortColumn nvarchar(50),@SortDirection nvarchar(20)
set @SortColumn='QuotationItemID'
set @SortDirection='DESC'
select @strSQL='SELECT [QuotationItemID]
,[QuoteID]
,[ProductIdName]
,[PricePerUnit]
,[Tax]
,[Quantity]
,[ProductDescription]
FROM [AaronDB].[dbo].[QuoteDetail]
order by '+ @SortColumn+' '+@SortDirection
exec (@strSQL)
这个问题第11个回答:
up
这个问题第12个回答:
我顶
这个问题第13个回答:
没看,悄悄的顶