国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

SQLSERVER中構(gòu)建執(zhí)行動態(tài)SQL語句的方法

來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 06:59:51
文檔

SQLSERVER中構(gòu)建執(zhí)行動態(tài)SQL語句的方法

SQLSERVER中構(gòu)建執(zhí)行動態(tài)SQL語句的方法:1 :普通SQL語句可以用exec執(zhí)行 Select * from tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- 請注意字符串前一定要加N 2:字段名,表名,數(shù)據(jù)庫名之類作為變量時,必須用動態(tài)SQL d
推薦度:
導(dǎo)讀SQLSERVER中構(gòu)建執(zhí)行動態(tài)SQL語句的方法:1 :普通SQL語句可以用exec執(zhí)行 Select * from tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- 請注意字符串前一定要加N 2:字段名,表名,數(shù)據(jù)庫名之類作為變量時,必須用動態(tài)SQL d

1 :普通SQL語句可以用exec執(zhí)行

Select * from tableName 
exec('select * from tableName') 
exec sp_executesql N'select * from tableName' -- 請注意字符串前一定要加N 

2:字段名,表名,數(shù)據(jù)庫名之類作為變量時,必須用動態(tài)SQL

declare @fname varchar(20) 
set @fname = 'FiledName' 
--Select @fname from tableName -- 錯誤,不會提示錯誤,但
結(jié)果為固定值FiledName,并非所要。 exec('select ' + @fname + ' from tableName') -- 請注意 加號前后的 單引號的邊上加空格 --當然將字符串改成變量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --設(shè)置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 --exec sp_executesql @s -- 此句會報錯 declare @s Nvarchar(1000) -- 注意此處改為nvarchar(1000) (必須為ntext或nchar哐nvarchar類型,不能是varchar類型) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正確

3. 輸入或輸出參數(shù)

--(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)

有些特殊原因,我們需要在SQL語句或者存儲過程中動態(tài)創(chuàng)建SQL語句,然后在SQL語句或存儲過程中動態(tài)來執(zhí)行。

這里,微軟提供了兩個方法,一個是使用

Execute函數(shù)

執(zhí)行方式為

Execute(@sql)來動態(tài)執(zhí)行一個SQL語句,但是這里的SQL語句無法得到里面的返回結(jié)果,下面來介紹另一種方法

使用存儲過程 sp_ExecuteSql

使用該存儲過程,則可將動態(tài)語句中的參數(shù)返回來。

比如

declare @sql nvarchar(800),@dd varchar(20)
set @sql='set @mm=''測試字符串'''
exec sp_executesql @sql,N'@mm varchar(20) output',@dd output
select @dd 

執(zhí)行他就會將內(nèi)部創(chuàng)建的SQL語句的某個變量的值返回到外部調(diào)用者。

主要來源于工作中的一個偶然需要:

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

這樣大家基本上就有些了解了。

您可能感興趣的文章:

  • PHP實現(xiàn)mysqli批量執(zhí)行多條語句的方法示例
  • 用非動態(tài)SQL Server SQL語句來對動態(tài)查詢進行執(zhí)行
  • mybatis 插件: 打印 sql 及其執(zhí)行時間實現(xiàn)方法
  • Mysql使用kill命令解決死鎖問題(殺死某條正在執(zhí)行的sql語句)
  • Mysql 服務(wù) 1067 錯誤 的解決方法:修改mysql可執(zhí)行文件路徑
  • MySql批量插入優(yōu)化Sql執(zhí)行效率實例詳解
  • oracle查看執(zhí)行最慢與查詢次數(shù)最多的sql語句
  • SQL執(zhí)行步驟的具體分析
  • 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    SQLSERVER中構(gòu)建執(zhí)行動態(tài)SQL語句的方法

    SQLSERVER中構(gòu)建執(zhí)行動態(tài)SQL語句的方法:1 :普通SQL語句可以用exec執(zhí)行 Select * from tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- 請注意字符串前一定要加N 2:字段名,表名,數(shù)據(jù)庫名之類作為變量時,必須用動態(tài)SQL d
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 欧美一区二区三区视频在线 | 免费中文字幕 | 久久午夜一区二区 | 国产欧美另类久久精品91 | 欧美v在线 | 免费看啪啪网站 | 一区二区亚洲视频 | 久久99精品一区二区三区 | 国产在线视频在线观看 | 亚洲精品高清在线观看 | 日韩一二三 | 日本高清在线播放一区二区三区 | 成人毛片在线观看 | 国产偷自拍| 欧美 日韩 国产 在线 | 国产99视频精品免费观看7 | 欧美另类在线观看 | 精品一区二区三区五区六区七区 | 国内偷自第一二三区 | 高清国产一区二区三区 | 亚洲视频在线看 | 免费一区二区三区在线视频 | 一区二区不卡久久精品 | 麻豆精品国产 | 国内精品91久久久久 | 国产精品美女流白浆视频 | 精品国产网站 | 国产在线观看第一页 | 久久91精品国产91 | 99久久国产亚洲综合精品 | 精品欧美一区二区三区在线 | 夜夜夜夜爽 | 好看的电影网站亚洲一区 | 欧美亚洲综合另类 | www.九九热| 欧美阿v高清资源在线 | 久久一次| 国产区最新 | 久久91这里精品国产2020 | 亚洲va在线va天堂va四虎 | 国产成人久久精品二区三区牛 |