Lấy kết quả của SQL động thành một biến cho máy chủ sql


116

Thực thi SQL động như sau trong Quy trình lưu trữ:

DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
SET @city = 'London'
SET @sqlCommand = 'SELECT COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city

Làm cách nào để sử dụng giá trị cột đếm (*) làm giá trị trả về trong SP?

Câu trả lời:


202
DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
declare @counts int
SET @city = 'New York'
SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75),@cnt int OUTPUT', @city = @city, @cnt=@counts OUTPUT
select @counts as Counts

4
+1: Bạn đánh bại tôi với nó, cần khai báo một biến và đánh dấu nó là OUTPUT. Để biết thêm thông tin và đọc khuyến nghị cho SQL động SQL Server, hãy xem Lời nguyền và phước lành của SQL động
OMG Ponies

1
Cảm ơn bạn. Từ khóa OUTPUT trong N '@ city nvarchar (75), @ cnt int OUTPUT' là những gì tôi đã thiếu.
Peter Lindholm

1
Có giải pháp nào không yêu cầu thêm biến đầu ra vào câu lệnh động không ???
Tab Alleman

2

Bạn có thể đã thử điều này, nhưng các thông số kỹ thuật của bạn để bạn có thể làm điều này?

DECLARE @city varchar(75)
DECLARE @count INT
SET @city = 'London'
SELECT @count = COUNT(*) FROM customers WHERE City = @city

2

phiên bản động

    ALTER PROCEDURE [dbo].[ReseedTableIdentityCol](@p_table varchar(max))-- RETURNS int
    AS
    BEGIN
        -- Declare the return variable here
       DECLARE @sqlCommand nvarchar(1000)
       DECLARE @maxVal INT
       set @sqlCommand = 'SELECT @maxVal = ISNULL(max(ID),0)+1 from '+@p_table
       EXECUTE sp_executesql @sqlCommand, N'@maxVal int OUTPUT',@maxVal=@maxVal OUTPUT
       DBCC CHECKIDENT(@p_table, RESEED, @maxVal)
    END


exec dbo.ReseedTableIdentityCol @p_table='Junk'

0
DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
DECLARE @cnt int
SET @city = 'London'
SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city
RETURN @cnt

1
Tôi nghĩ rằng câu trả lời của bạn đã bị cắt.
Hiền nhân

Msg 137, Must declare the scalar variable "@cnt". Msg 178 , A RETURN statement with a return value cannot be used in this context.. Một tác phẩm hay, anh bạn))
it3xl

0

đây có thể là một giải pháp?

declare @step2cmd nvarchar(200)
DECLARE @rcount NUMERIC(18,0)   
set @step2cmd = 'select count(*) from uat.ap.ztscm_protocollo' --+ @nometab
EXECUTE @rcount=sp_executesql @step2cmd
select @rcount

-2
 vMYQUERY := 'SELECT COUNT(*) FROM ALL_OBJECTS WHERE OWNER = UPPER(''MFI_IDBI2LIVE'') AND OBJECT_TYPE = ''TABLE'' 
    AND OBJECT_NAME  =''' || vTBL_CLIENT_MASTER || '''';
    PRINT_STRING(VMYQUERY);
    EXECUTE IMMEDIATE  vMYQUERY INTO VCOUNTTEMP ;

Điều này không áp dụng cho máy chủ sql.
Robert Lujo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.