刚刚的有问题,下面的通过测试;alter proc proc1 @page int as declare @sql varchar(8000) set @sql='Select top '+cast(@page as varchar)+' * From table1' exec(@sql) GO
少了括号:create proc proc1 ( @page int ) set @page = 10 select top @page from table1
select top @page from table1 ==================== 1、直接将变量写进执行的sql语句是不对的 2、缺少查找对象 == @sql = 'select top '+@page+' * from table1' == exec(@sql)
sqllong 的代码alter proc proc1 @page int as declare @sql varchar(8000) set @sql='Select top '+cast(@page as varchar)+' * From table1' exec(@sql) GO 在分析查询时是正确的 而我的代码 create proc proc1 @page int as set @page = 10 select top @page from table1 在分析查询时却提示@page语法错误 top后是不是只能跟整型数,如果那样的话那'Select top '+cast(@page as varchar)+'中不是把@page变成了字符型了吗, 那怎么运行有成功了呢? sq_zhuyi 说 select top @page from table1 ==================== 1、直接将变量写进执行的sql语句是不对的 --------------------------------- 1中的变量是不是指@page,而@page放进sql中是不对的 那我将写成select @page from table1没错啊(分析查询通过)
sq_zhuyi 说的对啊.1、直接将变量写进执行的sql语句是不对的 @page是你定义的变量,所以直接写到sql中不对. 2,你的sql语句本来也有语法错误. select top @page from table1 -- @page后面直接就from,少了要选取的字段名.所以 @sql = 'select top '+@page+ ' * from table1 ' --@page有个*,(注意到没有?) exec(@sql)是正确的
'Select top '+cast(@page as varchar)+ '中不是把@page变成了字符型了吗 ----------------------------------------------------------------------------------------- 是的,进行字符串的拼接,当然set @sql= 'Select top ' + @page + ' * From table1 ' 来拼接一样可以;1中的变量是不是指@page,而@page放进sql中是不对的 那我将写成select @page from table1没错啊(分析查询通过) ------------------------------------------------------------------------- 例如,SQL写为:select 10 from table 肯定是没有语法错误的
sqllong 我理解那是拼接的意思,可能是我表达不对,我其实是想问一下假设我不拼接的话 那么假设是 alter proc proc1 @page int as Select top cast(@page as varchar) * From table1 在分析查询时,它就提示cast附近有错误. 用你的方法 alter proc proc1 @page int as declare @sql varchar(8000) set @sql='Select top '+cast(@as varchar)+' * From table1' exec(@sql) GO 就正确了(分析查询) 那我就奇怪了,如果说"直接将变量写进执行的sql语句是不对的"是我错的原因,那你的怎么就没有那个错了 ,我感觉它们的意思都差不多啊
@page int
as
declare @sql varchar(8000)
set @sql='Select top '+cast(@page as varchar)+' * From table1'
exec(@sql)
GO
( @page int ) set @page = 10
select top @page from table1
====================
1、直接将变量写进执行的sql语句是不对的
2、缺少查找对象
== @sql = 'select top '+@page+' * from table1'
== exec(@sql)
@page int
as
declare @sql varchar(8000)
set @sql='Select top '+cast(@page as varchar)+' * From table1'
exec(@sql)
GO
在分析查询时是正确的
而我的代码
create proc proc1
@page int
as
set @page = 10
select top @page from table1
在分析查询时却提示@page语法错误
top后是不是只能跟整型数,如果那样的话那'Select top '+cast(@page as varchar)+'中不是把@page变成了字符型了吗,
那怎么运行有成功了呢?
sq_zhuyi 说
select top @page from table1
====================
1、直接将变量写进执行的sql语句是不对的
---------------------------------
1中的变量是不是指@page,而@page放进sql中是不对的
那我将写成select @page from table1没错啊(分析查询通过)
@page是你定义的变量,所以直接写到sql中不对.
2,你的sql语句本来也有语法错误.
select top @page from table1 -- @page后面直接就from,少了要选取的字段名.所以
@sql = 'select top '+@page+ ' * from table1 ' --@page有个*,(注意到没有?)
exec(@sql)是正确的
-----------------------------------------------------------------------------------------
是的,进行字符串的拼接,当然set @sql= 'Select top ' + @page + ' * From table1 ' 来拼接一样可以;1中的变量是不是指@page,而@page放进sql中是不对的
那我将写成select @page from table1没错啊(分析查询通过)
-------------------------------------------------------------------------
例如,SQL写为:select 10 from table 肯定是没有语法错误的
那么假设是
alter proc proc1
@page int
as
Select top cast(@page as varchar) * From table1
在分析查询时,它就提示cast附近有错误.
用你的方法
alter proc proc1
@page int
as
declare @sql varchar(8000)
set @sql='Select top '+cast(@as varchar)+' * From table1'
exec(@sql)
GO
就正确了(分析查询)
那我就奇怪了,如果说"直接将变量写进执行的sql语句是不对的"是我错的原因,那你的怎么就没有那个错了
,我感觉它们的意思都差不多啊