稱爲Emp的表包含id,name,lname,birthdate,address and salery
。我想從emp中進行選擇。 基本查詢:select * from emp
如果爲lname傳遞值,查詢:select * from emp where lname = 'fgfg'
像這樣。 所以我創建了以下sp。執行sp_executesql
create Procedure Proc_selectEmp
(
@name varchar(10) = null,
@lname varchar(10) = null,
@id varchar(10) = null
)
as
begin
select * from Emp
where
(@name is null or name = @name)
and (@lname is null or lname = @lname)
and (@id is null or id = @id)
end
和emp一樣,有13個表具有相同的列名。 所以我tablenmae也dynamic.That就是爲什麼我選擇執行sp_executesql.Can我創建這樣
create Procedure Proc_selectEmp
(
@name varchar(10) = null,
@lname varchar(10) = null,
@id varchar(10) = null
@tableName varchar(30)
)
as
begin
declare @query nvarchar(1000)
set @query = @query +'select * from '[email protected]+'
where ('[email protected]+' is null or name = '[email protected]+')
and ('[email protected]+' is null or lname = '[email protected]+')
and ('[email protected]+' is null or id = '[email protected]+')
end'
execute sp_executesql @query
我找不到問題。你有問題嗎? – Steve
如果問題是:「我可以動態構建SQL嗎?」那麼答案是「是」。 –
但是閱讀SQL注入。並使用'QUOTENAME'。請參閱[動態SQL的詛咒和祝福 - 處理動態表和列名稱](http://www.sommarskog.se/dynamic_sql.html#objectnames) –