谢谢你,冷兄, EXEC('SELECT TOP 1 [ID] FROM dbo.' + @TableName) 是可以执行的, 但是如果我想把它赋值给另一个变量@ID 可是无论 @ID = EXEC('SELECT TOP 1 [ID] FROM dbo.' + @TableName) 还是 EXEC('SELECT TOP 1 @ID = [ID] FROM dbo.' + @TableName) 都不可以,前者提示不可以执行, 后者提示需要提前定义@ID,在此脚本中我已经定义过了。 如何能把查询结果赋值给一个变量呢?
楼主真是大款啊,给这么多分啊,抢啊~~ declare @sql nvarchar(8000),@ID int set @sql = 'SELECT @ID=TOP 1 [ID] FROM dbo.' + @TableName exec sp_executesql @sql,N'@ID int output',@ID outputselect @ID --得到变量
为什么要用OPENQUERY和OPENSOURCE来实现呢??不明白啊? 看下面的:一、OPENDATASOURCE 不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。 语法 OPENDATASOURCE ( provider_name, init_string ) 问题:是否只能使用OLEDB访问其他数据源。二、OPENROWSET 包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。三、 OPENQUERY (链接服务器) 在给定的链接服务器(一个 OLE DB 数据源)上执行指定的直接传递查询。可以在查询的 FROM 子句中像引用表名那样引用 OPENQUERY 函数。依据 OLE DB 提供程序的能力,还可以将 OPENQUERY 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,但是 OPENQUERY 只返回第一个。
动态 sql see ——> http://blog.csdn.net/txlicenhe/archive/2003/12/15/21030.aspx
3: 输出参数 eg: declare @num, @sqls set @sqls='select count(*) from ' + @servername + '.a.dbo.b' exec(@sqls) 我如何能将exec执行的结果存入变量@num中declare @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from '+@servername+'.a.dbo.b' exec sp_executesql @sqls,N'@a int output',@num output select @num
EXEC('SELECT TOP 1 [ID] FROM dbo.' + @TableName)
是可以执行的,
但是如果我想把它赋值给另一个变量@ID
可是无论
@ID = EXEC('SELECT TOP 1 [ID] FROM dbo.' + @TableName)
还是
EXEC('SELECT TOP 1 @ID = [ID] FROM dbo.' + @TableName)
都不可以,前者提示不可以执行,
后者提示需要提前定义@ID,在此脚本中我已经定义过了。
如何能把查询结果赋值给一个变量呢?
declare @sql nvarchar(8000),@ID int
set @sql = 'SELECT @ID=TOP 1 [ID] FROM dbo.' + @TableName
exec sp_executesql @sql,N'@ID int output',@ID outputselect @ID --得到变量
看下面的:一、OPENDATASOURCE
不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。
语法
OPENDATASOURCE ( provider_name, init_string )
问题:是否只能使用OLEDB访问其他数据源。二、OPENROWSET
包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。三、 OPENQUERY (链接服务器)
在给定的链接服务器(一个 OLE DB 数据源)上执行指定的直接传递查询。可以在查询的 FROM 子句中像引用表名那样引用 OPENQUERY 函数。依据 OLE DB 提供程序的能力,还可以将 OPENQUERY 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,但是 OPENQUERY 只返回第一个。
see ——>
http://blog.csdn.net/txlicenhe/archive/2003/12/15/21030.aspx
eg:
declare @num,
@sqls
set @sqls='select count(*) from ' + @servername + '.a.dbo.b'
exec(@sqls)
我如何能将exec执行的结果存入变量@num中declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from '+@servername+'.a.dbo.b'
exec sp_executesql @sqls,N'@a int output',@num output
select @num