--(1)輸入?yún)?shù):
declare @QueryString nvarchar(1000) --動態(tài)查詢語句變量(注:必須為ntext或nchar哐nvarchar類型,不能是varchar類型)
declare @paramstring nvarchar(200) --設(shè)置動態(tài)語句中的參數(shù)的字符串(注:必須為ntext或nchar哐nvarchar類型,不能是varchar類型)
declare @input_id int--定義需傳入動態(tài)語句的參數(shù)的值
set @QueryString='select * from tablename where id=@id' --id為字段名,@id為要傳入的參數(shù)
set @paramstring='@id int' --設(shè)置動態(tài)語句中參數(shù)的定義的字符串
set @input_id =1 --設(shè)置需傳入動態(tài)語句的參數(shù)的值為1
exec sp_executesql @querystring,@paramstring,@id=@input_id
--若有多個參數(shù):
declare @QueryString nvarchar(1000) --動態(tài)查詢語句變量(注:必須為ntext或nchar哐nvarchar類型,不能是varchar類型)
declare @paramstring nvarchar(200) --設(shè)置動態(tài)語句中的參數(shù)的字符串(注:必須為ntext或nchar哐nvarchar類型,不能是varchar類型)
declare @input_id int--定義需傳入動態(tài)語句的參數(shù)的值,參數(shù)1
declare @input_name varchar(20)--定義需傳入動態(tài)語句的參數(shù)的值,參數(shù)2
set @QueryString='select * from tablename where id=@id and name=@name' --id與name為字段名,@id與@name為要傳入的參數(shù)
set @paramstring='@id int,@name varchar(20)' --設(shè)置動態(tài)語句中參數(shù)的定義的字符串,多個參數(shù)用","隔開
set @input_id =1 --設(shè)置需傳入動態(tài)語句的參數(shù)的值為1
set @input_name='張三' --設(shè)置需傳入動態(tài)語句的參數(shù)的值為"張三"
exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --請注意參數(shù)的順序
--(2)輸出參數(shù)
declare @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何將exec執(zhí)行結(jié)果放入變量中?
declare @QueryString nvarchar(1000) --動態(tài)查詢語名變量(注:必須為ntext或nchar哐nvarchar類型,不能是varchar類型)
declare @paramstring nvarchar(200) --設(shè)置動態(tài)語句中的參數(shù)的字符串(注:必須為ntext或nchar哐nvarchar類型,不能是varchar類型)
declare @output_result int--查詢結(jié)果賦給@output_result
set @QueryString='select @totalcount=count(*) from tablename' --@totalcount 為輸出結(jié)果參數(shù)
set @paramstring='@totalcount int output' --設(shè)置動態(tài)語句中參數(shù)的定義的字符串,多個參數(shù)用","隔開
exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
select @output_result
--當然,輸入與輸出參數(shù)可以一起使用,大家可以自己去試一試。
--另外,動態(tài)語句查詢的結(jié)果集要輸出的話,我只想到以下用臨時表的方法,不知各位有沒有更好的方法.
IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判斷臨時表#tmp是否存在,存在則刪除
drop table #tmp
select * into #tmp from tablename where 1=2 --創(chuàng)建臨時表#tmp,其結(jié)構(gòu)與tablename相同
declare @QueryString nvarchar(1000) --動態(tài)查詢語名變量(注:必須為ntext或nchar哐nvarchar類型,不能是varchar類型)
set @QueryString='select * from tablename '
insert into #tmp(field1,field2,) exec(@querystirng)
create proc proc_InToServer @收費站點編號 varchar(4),@車道號 tinyint,@進入時間 varchar(23),@UID char(16),
@車牌 varchar(12),@車型 char(1),@識別車牌號 varchar(12),@識別車型 char(1),@收費金額 money,@交易狀態(tài) char(1),
@有圖像 bit,@離開時間 varchar(23),@速度 float,@HasInsert int output
as
begin
declare @inTime datetime,@TableName varchar(255),@leaveTime datetime,@HasTable bit,@Sql nvarchar(4000)
select @intime=Convert(datetime,@進入時間),@leaveTime=Convert(datetime,@離開時間)
set @TableName='ETC03_01_OBE原始過車記錄表_'+dbo.formatDatetime(@intime,'YYYYMMDD')
select @HasTable=(Case when Count(*)>0 then 1 else 0 end) from sysobjects where id=Object_id(@TableName) and ObjectProperty(id,'IsUserTable')=1
if @HasTable=0
begin
set @Sql='CREATE TABLE [dbo].['+@TableName+'] (
[收費站點編號] [char] (4) COLLATE Chinese_PRC_CI_AS NOT NULL,
[車道號] [tinyint] NOT NULL,
[進入時間] [datetime] NOT NULL,
[UID] [char] (16) COLLATE Chinese_PRC_CI_AS NOT NULL,
[車牌] [varchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[車型] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[識別車牌號] [varchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[識別車型] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[收費金額] [money] NULL ,
[交易狀態(tài)] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[有圖像] [bit] NOT NULL ,
[離開時間] [datetime] NULL ,
[速度] [float] NULL,
Constraint'+' PK_'+@TableName+' primary key(收費站點編號,車道號,進入時間,UID)
) ON [PRIMARY]'
Execute(@Sql)
end
set @sql = 'select @Cnt=count(*) from '+@TableName+ ' where 收費站點編號='''+@收費站點編號+''' and 車道號='+cast(@車道號 as varchar(4))+' and 進入時間='''+@進入時間+''' and UID='''+@UID+''''
set @sql = @sql + ' if @Cnt=0 '
set @sql=@sql+'insert '+@TableName+' values('''+@收費站點編號+''','+cast(@車道號 as varchar(4))+','''+@進入時間+''','''+@Uid+''','''+@車牌+
''','''+@車型+''','''+ @識別車牌號+''','''+@識別車型+''','+Cast(@收費金額 as varchar(8))+','''+@交易狀態(tài)+''','+cast(@有圖像 as varchar(1))+
','''+@離開時間+''','+Cast(@速度 as varchar(8))+')'
--Execute(@sql)
exec sp_executesql @sql,N'@Cnt int output',@HasInsert output
end