SQL server stored procedure return a table

后端 未结 9 2183
情书的邮戳
情书的邮戳 2020-12-04 19:39

I have a stored procedure that takes in two parameters. I can execute it successfully in Server Management Studio. It shows me the results which are as I expect. However it

相关标签:
9条回答
  • 2020-12-04 20:27

    You can use an out parameter instead of the return value if you want both a result set and a return value

    CREATE PROCEDURE proc_name 
    @param int out
    AS
    BEGIN
        SET @param = value
    SELECT ... FROM [Table] WHERE Condition
    END
    GO
    
    0 讨论(0)
  • 2020-12-04 20:28

    Consider creating a function which can return a table and be used in a query.

    https://msdn.microsoft.com/en-us/library/ms186755.aspx

    The main difference between a function and a procedure is that a function makes no changes to any table. It only returns a value.

    In this example I'm creating a query to give me the counts of all the columns in a given table which aren't null or empty.

    There are probably many ways to clean this up. But it illustrates a function well.

    USE Northwind
    
    CREATE FUNCTION usp_listFields(@schema VARCHAR(50), @table VARCHAR(50))
    RETURNS @query TABLE (
        FieldName VARCHAR(255)
        )
    BEGIN
        INSERT @query
        SELECT
            'SELECT ''' + @table+'~'+RTRIM(COLUMN_NAME)+'~''+CONVERT(VARCHAR, COUNT(*)) '+
        'FROM '+@schema+'.'+@table+' '+
              ' WHERE isnull("'+RTRIM(COLUMN_NAME)+'",'''')<>'''' UNION'
        FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @table and TABLE_SCHEMA = @schema
        RETURN
    END
    

    Then executing the function with

    SELECT * FROM usp_listFields('Employees')
    

    produces a number of rows like:

    SELECT 'Employees~EmployeeID~'+CONVERT(VARCHAR, COUNT(*)) FROM dbo.Employees  WHERE isnull("EmployeeID",'')<>'' UNION
    SELECT 'Employees~LastName~'+CONVERT(VARCHAR, COUNT(*)) FROM dbo.Employees  WHERE isnull("LastName",'')<>'' UNION
    SELECT 'Employees~FirstName~'+CONVERT(VARCHAR, COUNT(*)) FROM dbo.Employees  WHERE isnull("FirstName",'')<>'' UNION
    
    0 讨论(0)
  • 2020-12-04 20:29
    create procedure PSaleCForms
    as
    begin
    declare 
    @b varchar(9),
    @c nvarchar(500),
    @q nvarchar(max)
    declare @T table(FY nvarchar(9),Qtr int,title nvarchar    (max),invoicenumber     nvarchar(max),invoicedate datetime,sp decimal    18,2),grandtotal decimal(18,2))
    declare @data cursor
    set @data= Cursor
    forward_only static
    for 
    select x.DBTitle,y.CurrentFinancialYear from [Accounts     Manager].dbo.DBManager x inner join [Accounts Manager].dbo.Accounts y on        y.DBID=x.DBID where x.cfy=1
    open @data
    fetch next from @data
    into @c,@b
    while @@FETCH_STATUS=0
    begin
    set @q=N'Select '''+@b+''' [fy], case cast(month(i.invoicedate)/3.1 as int)     when 0 then 4 else cast(month(i.invoicedate)/3.1 as int) end [Qtr],     l.title,i.invoicenumber,i.invoicedate,i.sp,i.grandtotal from     ['+@c+'].dbo.invoicemain i inner join  ['+@c+'].dbo.ledgermain l on     l.ledgerid=i.ledgerid where (sp=0 or stocktype=''x'') and invoicetype=''DS'''
    

    insert into @T exec [master].dbo.sp_executesql @q fetch next from @data into @c,@b end close @data deallocate @data select * from @T return end

    0 讨论(0)
提交回复
热议问题