![](/img/trans.png)
[英]How to get the recordset in SQL Server 2008 r2 stored procedure?
[英]Stored procedure parameters with literals not working in SQL Server 2008 R2
我有一個存儲過程,需要兩個參數作為varchar(50)
。 存儲過程對臨時表進行一些簡單的查詢,並從臨時表返回結果集(我刪除了實際查詢)
ALTER PROCEDURE [dbo].[cv_GetBooks]
@bookNumber as varchar(50),
@bookDate as varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--a few select statements
if @ismultiple = '0'
begin
select * from books where bookNumber = @bookNumber
and bookDate = @bookDate
and Bookname is not null
end
ELSE
Begin
select * into #temp from books
where bookNumber = @bookNumber
and bookDate = @bookDate
and Bookname is null
select * from books
where bookauthor not in (select bookauthor from #temp)
and bookNumber= @bookNumber
and bookDate= @bookDate
drop table #temp
end
END
我已在SQL Server 2008的本地開發計算機上安裝了此查詢。我還將其安裝在運行Windows Server 2003和SQL Server 2008的兩台測試計算機上。存儲過程已按預期工作。
cv_GetBooks '012345678', '06062012' --returns result set as expected
我最近將其移至另一個運行Windows Server 2008和SQL Server 2008 R2的遠程環境中的測試服務器。 存儲過程不再按預期方式工作。 運行SQL事件探查器后,我確認正在執行相同的代碼:
cv_GetBooks '012345678', '06062012' --run on SQL server 2008 r2 returns nothing
當我從查詢中刪除引號時,我得到了預期的結果:
cv_GetBooks 012345678, 06062012 --run with out quotes server returns expected result set
從那以后,我已經在本地版本的SQL Server 2008 R2上安裝了相同的存儲過程,並且一切都按預期運行,並使用了文字字符串引號,如第一個示例中所示。
起初我以為這是傳遞參數的轉義問題,但這似乎並不正確,因為傳遞的值不包含任何單引號。
安裝並在很多環境中都可以使用時,我印象中這也許是我不知道的SQL Server中的設置。
是什么原因導致存儲過程無法返回在SQL Server 2008 r2實例上具有字符串文字的結果集,但是在那里正確地工作了呢?
這可能不是確切的答案,但是請嘗試以此作為更多了解問題的方法。 使用適當的參數在SSMS中運行一些基本查詢(而不是整個proc),例如:
(我不確定@ismultiple的來源-似乎沒有被聲明或參數化嗎?)
select *
from books
where bookNumber = '012345678'
and bookDate = '06062012'
and Bookname is null
和
select *
from books
where bookNumber = 012345678
and bookDate = 06062012
and Bookname is null
你得到相同的結果嗎? 您得到什么結果?
我的懷疑是數據類型:正在某處進行某種轉換,因此不能在一種環境中工作而在另一種環境中工作(數據類型不同或SQL版本不會自動轉換)。 EG:如果數據以數字數據類型存儲在表中,則可以將012345678轉換為12345678。 但是嘗試在沒有存儲過程和/或臨時表的情況下隔離行為,這可能有助於縮小可能的原因...
您沒有發布Table Books的表定義,但是
cv_GetBooks '012345678', '06062012'
--run on SQL server 2008 r2 returns nothing
cv_GetBooks 012345678, 06062012
--run with out quotes server returns expected result set
如果BookNumber和BookDate是數字而不是varchar,則可能導致此錯誤:
以int開頭的前導零將被刪除,並且在轉換為varchar時,結果字符串不包含前導零。
還不清楚表中的數據如何影響代碼中的執行(IF語句!)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.