Ⅰ vb6 動態查詢 sqlserver 2008 R2資料庫中的數據
看你的欄位時間,是前面最小後面最大,假設你時間最大的是出庫完成(如果不是,你自己修改下)時間范圍限定應該限定最小時間欄位和最大時間欄位都在范圍內,時間差用datediff函數,不過這玩意取整數,如果用小時為單位的話,一小時50分鍾也算一小時,所以取分鍾為單位
如下(假定最小日期是訂單錄入,最大日期是出庫完成,不是的話自己修改欄位名)
SQL = "SELECT * from 表名 where datediff( minute," & Combo1(1).Text & " , " & Combo1(2).Text & " )> " & Text1.Text & "*60 AND 訂單錄入 >= '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & " 0:0:1' AND 出庫完成 <= '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & " 23:59:59'"
如果不知道哪個欄位是最大日期哪個欄位是最小日期,那就只能每個欄位都加限定條件了
這是兩個欄位判斷,繼續and下去,所有欄位判斷一遍,都不超出范圍才算
Dim SQL As String
SQL = "SELECT * from 表名 where datediff( minute," & Combo1(1).Text & " , " & Combo1(2).Text & " )> " & Text1.Text & "*60 AND (訂單錄入 between '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & "' AND '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & "') AND (訂單審核 between '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & "' AND '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & "')"
Ⅱ 什麼是sqlserver 2005中的動態語句
樓上的說的正確
所謂動態sql語句,就是根據實際情況拼接出的語句
比如有個多條件查詢,用戶可以選擇用名稱或者ID來查詢:
select * from tableName where id = 100
select * from tableName where name = '張三'
但是我們並不知道用戶會用哪個查詢條件,這個時候就會用到動態sql
假設@id,@name這兩個是取得的用戶錄入信息
declare @sql varchar(1000)
select @sql = 'select * from tableName where 1=1 '
if @id > 0 --如果用戶選擇了id
select @sql = @sql + ' id = ' + convert(varchar(5),@id)
if @name > '' --如果用戶在名稱欄填寫了內容
select @sql = @sql + ' name = ''' + @name + ''''
exec(@sql) --執行最終的sql
例子舉的可能不是十分貼切,意思樓主能領會就行。
Ⅲ sqlserver關於動態執行sql問題
set @flag3=@flag3+1;
set @temp1=DATEADD(M,1,@temp1);
set @temp3=@temp1;
在你循環中賦值的語句,你是想每次循環賦不同的時間,但是在你用exec調用時,只能傳入最後計算好的唯一的值,這樣可能就查詢不到數據了吧,不然你拼接成字元串吧
Ⅳ sqlserver 存儲過程動態SQL查詢表 查不到表的時候不報錯給提示
你可以在存儲過程中獲取異常進行處理,就和C#的try{}catch{}一個道理
Ⅳ SQLServer動態exec查詢語句,返回查詢變數
drop procere tempPro;
go
create procere tempPro
as
declare
@sql nvarchar(200),
@user nvarchar(500),
@tablename nvarchar(100)
begin
set @tablename='t_stars'
set @sql=N'select @userOUT = stars_name from '+@tablename+' where stars_id=''hk1006''';
execute sp_executesql @sql, N'@userOUT varchar(30) output', @userOUT=@user output;
print @user;
end
go
exec tempPro;
Ⅵ sqlserver多表查詢,根據動態獲取的where條件
Select 欄位a from 表1 where 『獲取的值』 like 欄位a
union
Select 欄位b from 表2 where 『獲取的值』 like 欄位b
Ⅶ SqlServer如何生成動態交叉表查詢
這里指的交叉表,就是象Access的交叉表查詢一樣的效果,比如Employees表中City欄位代表了城市的名稱,TitleOfCourtesy代表稱呼,我們希望按照City和TitleOfCourtesy的情況來統計ReportsTo欄位的合計數(本統計沒有任何實際意義,只是挑選一些記錄包含重復內容的欄位來說明情況),並顯示成以下格式:(TitleOfCourtesy作為行,City作為列) ,�0�2�0�2SUM(CASE�0�2City�0�2WHEN�0�2'Redmond'�0�2THEN�0�2ReportsTo�0�2ELSE�0�2NULL�0�2END)�0�2AS�0�2[Redmond�0�2City] ,�0�2�0�2SUM(CASE�0�2City�0�2WHEN�0�2'Seattle'�0�2THEN�0�2ReportsTo�0�2ELSE�0�2NULL�0�2END)�0�2AS�0�2[Seattle�0�2City]FROM�0�2Employees�0�2GROUP�0�2BY�0�2TitleOfCourtesy 其中利用了CASE語句判斷,如果是相應的列,則取需要統計的ReportsTo數值,否則取NULL,然後再合計 其中有兩個常見問題說明一下: a、用NULL而不用0是有道理的,假如用0,雖然求和函數SUM可以取到正確的數,但類似COUNT函數(取記錄個數),結果就不對了,因為Null不算一條記錄,而0要算,同理空字串("")也是這樣,總之在這里應該用NULL,這樣任何函數都沒問題。 b、假如在視圖的設計界面保存以上的查詢,則會報錯「沒有輸出列」,從而無法保存,其實只要在查詢前面加上一段:Create View ViewName AS ...,ViewName是你准備給查詢起的名稱,...就是我們的查詢,然後運行一下,就可以生成視圖了,對於其他一些設計器不支持的語法,也可以這樣保存。 總體思路其實很簡單,首先檢索列頭信息,形成一個游標,然後遍歷游標,將上面查詢語句里Case判斷的內容用游標里的值替代,形成一條新的Sql查詢,然後執行,返回結果,就可以了,以下是我寫的一個存儲過程,供大家參考:CREATE�0�2procere�0�2CorssTab�0�2 @strTabName�0�2as�0�2varchar(50)�0�2=�0�2'Employees' ,�0�2--此處放表名@strCol�0�2as�0�2varchar(50)�0�2=�0�2'City' ,�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2--表頭分組依據欄位@strGroup�0�2as�0�2varchar(50)�0�2=�0�2'TitleOfCourtesy',--分組欄位@strNumber�0�2as�0�2varchar(50)�0�2=�0�2'ReportsTo' ,�0�2�0�2�0�2�0�2--被統計的欄位@strSum�0�2as�0�2varchar(10)�0�2=�0�2'Sum'�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2--運算方式ASDECLARE�0�2@strSql�0�2as�0�2varchar(1000 ),�0�2@strTmpCol�0�2as�0�2varchar(100)EXECUTE�0�2('DECLARE�0�2corss_cursor�0�2CURSOR�0�2FOR�0�2SELECT�0�2DISTINCT�0�2'�0�2+�0�2@strCol�0�2+�0�2'�0�2from�0�2'�0�2+�0�2@strTabName�0�2+�0�2'�0�2for�0�2read�0�2only�0�2')�0�2--生成游標begin�0�2�0�2SET�0�2nocount�0�2ON�0�2�0�2�0�2SET�0�2@strsql�0�2='select�0�2'�0�2+�0�2@strGroup�0�2+�0�2' ,�0�2'�0�2+�0�2@strSum�0�2+�0�2'('�0�2+�0�2@strNumber�0�2+�0�2')�0�2AS�0�2['�0�2+�0�2@strSum�0�2+�0�2'�0�2of�0�2'�0�2+�0�2@strNumber�0�2+�0�2']'�0�2--查詢的前半段�0�2�0�2OPEN�0�2corss_cursor�0�2�0�2while�0�2(0=0)�0�2�0�2BEGIN�0�2�0�2�0�2�0�2FETCH�0�2NEXT�0�2FROM�0�2corss_cursor�0�2--遍歷游標,將列頭信息放入變數@strTmpCol �0�2�0�2�0�2�0�2INTO�0�2@strTmpCol�0�2�0�2�0�2�0�2if�0�2(@@fetch_status<0)�0�2break�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2SET�0�2@strsql�0�2=�0�2@strsql�0�2+�0�2' ,�0�2'�0�2+�0�2@strSum�0�2+�0�2'(CASE�0�2'�0�2+�0�2@strCol�0�2+�0�2'�0�2WHEN�0�2'''�0�2+�0�2@strTmpCol�0�2+�0�2'''�0�2THEN�0�2'�0�2+�0�2@strNumber�0�2+�0�2'�0�2ELSE�0�2Null�0�2END)�0�2AS�0�2['�0�2+�0�2@strTmpCol�0�2+�0�2'�0�2'�0�2+�0�2@strCol�0�2+�0�2']'�0�2--構造查詢�0�2�0�2END�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2SET�0�2@strsql�0�2=�0�2@strsql�0�2+�0�2'�0�2from�0�2'�0�2+�0�2@strTabname�0�2+�0�2'�0�2group�0�2by�0�2'�0�2+�0�2@strGroup�0�2--查詢結尾�0�2�0�2EXECUTE(@strsql)�0�2--執行�0�2�0�2IF�0�2@@error�0�2<0�0�2RETURN�0�2@@error�0�2--如果出錯,返回錯誤代碼�0�2�0�2CLOSE�0�2corss_cursor�0�2�0�2�0�2DEALLOCATE�0�2corss_cursor�0�2RETURN�0�20�0�2--釋放游標,返回0表示成功endGO幾點說明:a、這是一個通用存儲過程,使用時@strTabName、@strCol、@strGroup、@strNumber、@strSum幾個變數設置一下就可以用到其他表上,其中結果集的第二列我加了個合計列 b、為了測試方便,我在存儲過程中設置了默認值,就是前面提到的Employees表,這樣直接運行時就可以出來我上面提到的結果。 c、使用時,可以把上面的代碼復制到企業管理器的查詢設計界面Sql窗格,或者查詢分析器里運行一下(注意正確選擇NorthWind資料庫),就可以生成一個存儲過程:CorssTab,然後直接運行CorssTab,如果出現本文前面類似的窗格,就表示運行成功了。 d、假如用於其它表,首先需要在你的用戶資料庫里生成此存儲過程(當然也可以放到Master里,然後再加個變數:@DataBase,賦值為資料庫名稱,然後在上面代碼打開指定資料庫,這樣所有的資料庫都可以調用它),當你調用時,採取以下格式:
Ⅷ MYSQL 動態查詢
首先我想說MYSQL存儲過程執行動態語句的語法有限,很多語法都不能用!
CREATE DEFINER = 'ks'@'192.168.18.110' PROCEDURE `testp`(IN b VARCHAR(30))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
begin
declare namesql VARCHAR(100);
set @xxxx=CONCAT("select * from ",b);
prepare stmt1 from @xxxx;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END;
剛剛寫的b是傳入的參數,不知道是不是你要的東西!
Ⅸ sqlserver動態表名查詢
因為表名是根據月份來創建的,所以創建視圖需要利用參數作為表名進行查詢
可以再加一個語句判斷表是否存在
Ⅹ sql的動態查詢的問題
tables應該是系統的視圖,可以使用系統表根據需要創建一個自己定義的,不過需要足夠的授權才可以執行。查詢不出來一般來說都是許可權問題。
最好使用視圖的方式進行訪問,可以創建一個視圖:
create view v_tables as
select tablename,tabledev from tables;
然後使用查詢語句查詢,如果視圖使用DBA創建,那麼需要給用戶授權。