创建存储过程动态生成SQL语句的问题

No4000 2007-11-19 12:08:44
CREATE PROC GetInFo @tableName Varchar(30)
@filter varchar(30)

AS
declare @sql nvarchar(1000)

begin
set @sql ='select '+@filter+' from '+@tableName
print @sql
execute(@sql)
end
为什么这样写不对? 我要@tableName 后面再加一个where条件又如何做?
...全文
108 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
No4000 2007-11-19
  • 打赏
  • 举报
回复
set @sql = 'select '+@filter+ ' from '+@tableName+' where '+' 1=1 ' 请问这句为什么要加+' where '+' 1=1 ' ? 谢谢
-狙击手- 2007-11-19
  • 打赏
  • 举报
回复
exec getinfo 'ta', 'col1','id = 1'

drop proc getinfo

/*

col1
----
e

(所影响的行数为 1 行)
*/
-狙击手- 2007-11-19
  • 打赏
  • 举报
回复
create table ta(id int,col1 char(2))
go
insert into ta select 1,'a' union select 2,'b'

select * from ta
/*id col1
----------- ----
1 e
2 b
*/

CREATE PROC GetInFo
@tableName Varchar(30),
@filter varchar(30),
@conditions varchar(512)=NULL --where后面的条件
AS
begin
declare @sql nvarchar(1000)


set @sql = 'select '+@filter+ ' from '+@tableName+ isnull( ' where '+@conditions, ' ')
-- print @sql
execute(@sql)
end
go
exec getinfo 'ta', 'col1','id = 1'

drop proc getinfo
dobear_0922 2007-11-19
  • 打赏
  • 举报
回复
CREATE PROC GetInFo
@tableName Varchar(512),
@filter varchar(512),
@conditions varchar(512)=NULL --where后面的条件
AS
begin
declare @sql nvarchar(8000)
set @sql = 'select '+@filter+ ' from '+@tableName+isnull(' where '+@conditions,'')
print @sql
execute(@sql)
end
dobear_0922 2007-11-19
  • 打赏
  • 举报
回复
CREATE   PROC   GetInFo   
@tableName Varchar(30),
@filter varchar(30)
AS
begin
declare @sql nvarchar(1000)


set @sql = 'select '+@filter+ ' from '+@tableName+' where '+' 1=1 '
print @sql
execute(@sql)
end
dobear_0922 2007-11-19
  • 打赏
  • 举报
回复
CREATE   PROC   GetInFo   @tableName   Varchar(30) 
@filter varchar(30)

AS
declare @sql nvarchar(1000)

begin
set @sql = 'select '+@filter+ ' from '+@tableName+' where '+' 1=1 '
print @sql
execute(@sql)
end
glgoon 2007-11-19
  • 打赏
  • 举报
回复
CREATE   PROC   GetInFo   
@tableName Varchar(30),
@filter varchar(30),
@id varchar(2)
AS
begin
declare @sql nvarchar(1000)


set @sql = 'select '+@filter+' from '+@tableName+ ' where id='+@id
print @sql
execute(@sql)
end
go
exec getinfo 'ta', 'col1','1'

drop proc getinfo

练习
hui_hui_2007 2007-11-19
  • 打赏
  • 举报
回复

ALTER PROCEDURE tmp
AS
declare @sql varchar(1000)
set @sql= 'select * from Customers where left(customerid,1)=''a'' order by CustomerID'

exec(@sql)
tre_sdlpq 2007-11-19
  • 打赏
  • 举报
回复
CREATE PROC GetInFo @tableName Varchar(30)
@filter varchar(30)

AS
declare @sql nvarchar(1000)


set @sql = 'select '+@filter+ ' from '+@tableName
set @sql = @sql+'where 条件'
print @sql
execute(@sql)
这样做绝对可以


给分阿

fengming2222 2007-11-19
  • 打赏
  • 举报
回复
请问这句为什么要加+ ' where '+ ' 1=1 ' ?

----------------------------------
意思是你自己再加一个WHERE条件。
或者说用于程序中条件字符串的拼接,相当于while(true),if(true)。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧