動態sql語句基本語法
1 :普通SQL語句可以用
Exec
執行
eg:
Select
*
from
tableName
Exec
(
'select * from tableName'
)
Exec
sp_executesql N
'select * from tableName'
2:字段名,表名,數據庫名之類作爲變量時,必須用動態SQL
eg:
declare
@fname
varchar
(20)
set
@fname =
'FiledName'
Select
@fname
from
tableName
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)
set
@s =
'select '
+ @fname +
' from tableName'
Exec
(@s)
exec
sp_executesql @s
3. 輸出參數
declare
@num
int
,
@sqls nvarchar(4000)
set
@sqls=
'select count(*) from tableName'
exec
(@sqls)
declare
@num
int
,
@sqls nvarchar(4000)
set
@sqls=
'select @a=count(*) from tableName '
exec
sp_executesql @sqls,N
'@a int output'
,@num
output
select
@num
轉載:http://bbs.csdn.net/topics/230067792
create
table
t_org
(
org_id
int
primary
key
identity
not
null
,
org_name
varchar
(50),
org_role
varchar
(20)
)
insert
into
t_org
values
(
'CSDN'
,
'1,2,3'
)
insert
into
t_org
values
(
'新浪'
,
'2,4'
)
insert
into
t_org
values
(
'javaeye'
,
'1'
)
insert
into
t_org
values
(
'騰訊'
,
'2,4'
)
insert
into
t_org
values
(
'貓撲'
,
'3,4'
)
insert
into
t_org
values
(
'IT1'
,
'1'
)
insert
into
t_org
values
(
'IT2'
,
'1'
)
insert
into
t_org
values
(
'IT3'
,
'1'
)
insert
into
t_org
values
(
'IT4'
,
'1'
)
insert
into
t_org
values
(
'論壇1'
,
'3'
)
insert
into
t_org
values
(
'論壇2'
,
'3'
)
insert
into
t_org
values
(
'論壇3'
,
'3'
)
insert
into
t_org
values
(
'搜狐'
,
'2'
)
insert
into
t_org
values
(
'雅虎'
,
'2'
)
insert
into
t_org
values
(
'****'
,
'1,2,3,4'
)
insert
into
t_org
values
(
'**測試*'
,
'16'
)
if exists(
select
1
from
sysobjects
where
id=object_id(
'query_org'
)
and
type=
'p'
)
drop
proc query_org
go
create
proc query_org
@org_role
varchar
(20)
as
begin
declare
@sql
varchar
(2000)
select
@sql =
'select * from t_org where org_role like '
'%'
+@org_role+
'%'
''
exec
(@sql)
end
if exists(
select
1
from
sysobjects
where
id=object_id('query_org_2
') and type='
p
' )
drop proc query_org_2
go
create proc query_org_2
@org_role varchar(20)
as
begin
declare @sql varchar(2000)
select @sql = '
select
*
from
t_org
where
' + '
(CHARINDEX(
''
'+@org_role+'
''
+
''
,
''
,org_role+
''
,
''
)>0)
'
-- 費了好大勁,才拼成功。 將一個正常語句,寫得動態SQL裏,那個引號的連接規則是什麼啊?
exec (@sql)
end
-- exec query_org_2 '
1'