读书人

求一动态sql文返回值的写法解决思路

发布时间: 2013-08-14 14:27:55 作者: rapoo

求一动态sql文返回值的写法
求一动态sql文返回值的写法

获取传进来表名里OPENDATE(日期型)列不为空的第一条数据
create PROCEDURE GetData
@tableName varchar(100)

BEGIN
declare @strSql nvarchar(1000),
declare @compareDate date
set @strSql='select @returnDate=top 1 OPENDATE from' + @tableName + ' where OPENDATE is not null'
exec sp_executesql @strSql N'@returnDate date output',@compareDate output
select @compareDate
END
GO

如果列名是动态的如何写啊
[解决办法]

create PROCEDURE GetData    
@tableName varchar(100),
@columnName VARCHAR(100) --添加一个变量即可
as
BEGIN
declare @strSql nvarchar(1000)
declare @compareDate date

set @strSql='select @returnDate=top 1 '+@columnName+' from' + @tableName + ' where OPENDATE is not null' --注意这里的修改

exec sp_executesql @strSql N'@returnDate date output',@compareDate output

select @compareDate
END
GO

[解决办法]
引用:
执行的时候说top 附近有语法错

--TOP应该放前面:
CREATE TABLE TEST(OPENDATE DATE)
INSERT TEST SELECT NULL UNION ALL SELECT '2013-08-08'

CREATE PROCEDURE GetData
@tableName varchar(100)
AS
BEGIN
declare @strSql nvarchar(1000)
declare @compareDate date

set @strSql=N'select top(1) @returnDate=OPENDATE from ' + @tableName + ' where OPENDATE is not null'
exec sp_executesql @strSql, N'@returnDate date output',@compareDate OUTPUT

select @compareDate
END
GO

[解决办法]
引用:

Quote: 引用:


执行的时候说top 附近有语法错

--TOP应该放前面:
CREATE TABLE TEST(OPENDATE DATE)
INSERT TEST SELECT NULL UNION ALL SELECT '2013-08-08'

CREATE PROCEDURE GetData
@tableName varchar(100)
AS
BEGIN
declare @strSql nvarchar(1000)
declare @compareDate date

set @strSql=N'select top(1) @returnDate=OPENDATE from ' + @tableName + ' where OPENDATE is not null'
exec sp_executesql @strSql, N'@returnDate date output',@compareDate OUTPUT

select @compareDate
END
GO

+10086

读书人网 >SQL Server

热点推荐