这个存储过程怎么改?
CREATE PROCEDURE [dbo].[T_spImportK3Account]
@FBrnoName varchar(100),----数据库名
@FdateFrom datetime, ----起始日期
@FdateEnd datetime, ----终止日期
@FAccountNumberFrom nvarchar(100), ----起始科目
@FAccountNumberEnd nvarchar(100) ----终止科目
AS
SELECT v.FVoucherID, convert(char(10),v.FDate,121) FDate,v.Fyear,v.Fperiod,v.FNumber,v.FEntryCount,v.FDebitTotal, v.FChecked,
v.FPreparerID,u1.FName as FPreparer,v.FCheckerID,u2.FName as FChecker,e.FAccountID, a.FNumber FAccountNumber,
a.FName as FAccountName, e.FDetailID,e.FDC, e.FAmount, e.FQuantity, e.FUnitPrice, e.FExplanation,e.FEntryID into #temp1
FROM @FBrnoName.. t_Voucher v With (Readpast) INNER JOIN @FBrnoName ..t_VoucherEntry e
WITH (Readpast) ON v.FVoucherID=e.FVoucherID INNER JOIN @FBrnoName ..t_Account a ON e.FAccountID=a.FAccountID
Left outer join @FBrnoName .. t_Account a1 ON e.FAccountID2=a1.FAccountID
Left outer join @FBrnoName ..t_User u1 on v.FPreparerID = u1.FUserID
Left outer join @FBrnoName ..t_User u2 on v.FCheckerID = u2.FUserID
WHERE v.Fdate > =@Fdate1 And v.Fdate <= @Fdate2 AND
a.Fnumber > = @FAccountNumber1 And a.Fnumber <= @FAccountNumber2
GO
[解决办法]
CREATE PROCEDURE [dbo].[T_spImportK3Account]
@FBrnoName varchar(100),----数据库名
@FdateFrom datetime, ----起始日期
@FdateEnd datetime, ----终止日期
@FAccountNumberFrom nvarchar(100), ----起始科目
@FAccountNumberEnd nvarchar(100) ----终止科目
AS
BEGIN
EXEC( 'SELECT v.FVoucherID, convert(char(10),v.FDate,121) FDate,v.Fyear,v.Fperiod,v.FNumber,v.FEntryCount,v.FDebitTotal, v.FChecked,
v.FPreparerID,u1.FName as FPreparer,v.FCheckerID,u2.FName as FChecker,e.FAccountID, a.FNumber FAccountNumber,
a.FName as FAccountName, e.FDetailID,e.FDC, e.FAmount, e.FQuantity, e.FUnitPrice, e.FExplanation,e.FEntryID into #temp1
FROM '+@FBrnoName+ '..t_Voucher v With (Readpast)
INNER JOIN '+@FBrnoName+ '..t_VoucherEntry e WITH (Readpast) ON v.FVoucherID=e.FVoucherID
INNER JOIN '+@FBrnoName+ ' ..t_Account a ON e.FAccountID=a.FAccountID
Left outer join '+@FBrnoName+ '.. t_Account a1 ON e.FAccountID2=a1.FAccountID
Left outer join '+@FBrnoName+ '..t_User u1 on v.FPreparerID = u1.FUserID
Left outer join '+@FBrnoName+ '..t_User u2 on v.FCheckerID = u2.FUserID
WHERE v.Fdate > = ' ' '+@Fdate1+ ' ' ' And v.Fdate <= ' ' '+@Fdate2+ ' ' ' AND
a.Fnumber > = ' ' '+@FAccountNumber1+ ' ' ' And a.Fnumber <= ' ' '+@FAccountNumber2+ ' ' ' ')
END
GO
------解决方案--------------------
CREATE PROCEDURE [dbo].[T_spImportK3Account]
@FBrnoName varchar(100),----数据库名
@FdateFrom datetime, ----起始日期
@FdateEnd datetime, ----终止日期
@FAccountNumberFrom nvarchar(100), ----起始科目
@FAccountNumberEnd nvarchar(100) ----终止科目
AS
declare @str varchar(8000)
set @str = 'SELECT v.FVoucherID, convert(char(10),v.FDate,121) FDate,v.Fyear,v.Fperiod,v.FNumber,v.FEntryCount,v.FDebitTotal, v.FChecked,
v.FPreparerID,u1.FName as FPreparer,v.FCheckerID,u2.FName as FChecker,e.FAccountID, a.FNumber FAccountNumber,
a.FName as FAccountName, e.FDetailID,e.FDC, e.FAmount, e.FQuantity, e.FUnitPrice, e.FExplanation,e.FEntryID into #temp1
FROM '+@FBrnoName+ '.. t_Voucher v With (Readpast) INNER JOIN '+@FBrnoName+ '..t_VoucherEntry e
WITH (Readpast) ON v.FVoucherID=e.FVoucherID INNER JOIN '+@FBrnoName+ '..t_Account a ON e.FAccountID=a.FAccountID
Left outer join '+@FBrnoName+ '.. t_Account a1 ON e.FAccountID2=a1.FAccountID
Left outer join '+@FBrnoName+ '..t_User u1 on v.FPreparerID = u1.FUserID
Left outer join '+@FBrnoName+ '..t_User u2 on v.FCheckerID = u2.FUserID
WHERE v.Fdate > = '+@Fdate1+ ' And v.Fdate <= '+@Fdate2+ ' AND
a.Fnumber > = '+@FAccountNumber1+ ' And a.Fnumber <= '+@FAccountNumber2 '
exec (@str)
GO
[解决办法]
楼主的应该用动态SQL啊
数据库都是动态的。
declare @SQL varchar(8000)
set @SQL = 'SELECT v.FVoucherID, convert(char(10),v.FDate,121) FDate,v.Fyear,v.Fperiod,v.FNumber,v.FEntryCount,v.FDebitTotal, v.FChecked,
v.FPreparerID,u1.FName as FPreparer,v.FCheckerID,u2.FName as FChecker,e.FAccountID, a.FNumber FAccountNumber,
a.FName as FAccountName, e.FDetailID,e.FDC, e.FAmount, e.FQuantity, e.FUnitPrice, e.FExplanation,e.FEntryID
into #temp1
FROM '+@FBrnoName+ '.. t_Voucher v With (Readpast) INNER JOIN '+@FBrnoName+ '..t_VoucherEntry e
WITH (Readpast) ON v.FVoucherID=e.FVoucherID INNER JOIN '+@FBrnoName+ '..t_Account a ON e.FAccountID=a.FAccountID
Left outer join '+@FBrnoName+ '.. t_Account a1 ON e.FAccountID2=a1.FAccountID
Left outer join '+@FBrnoName+ '..t_User u1 on v.FPreparerID = u1.FUserID
Left outer join '+@FBrnoName+ '..t_User u2 on v.FCheckerID = u2.FUserID
WHERE v.Fdate > = '+@Fdate1+ ' And v.Fdate <= ' + @Fdate2 + ' AND
a.Fnumber > = '+@FAccountNumber1+ ' And a.Fnumber <= '+ @FAccountNumber2 '
exec (@SQL)
[解决办法]
- SQL code
[code=SQL]楼主这样只是把数据插入临时表了。并没有对临时表进行查询。是没有返回结果的。。应该:CREATE PROCEDURE [dbo].[T_spImportK3Account] @FBrnoName varchar(100),----数据库名 @FdateFrom datetime, ----起始日期 @FdateEnd datetime, ----终止日期 @FAccountNumberFrom nvarchar(100), ----起始科目 @FAccountNumberEnd nvarchar(100) ----终止科目 AS create table #temp1(FVoucherID int,FDate datetime,....)--这里要写上所有的列exec('insert into #temp1 select * from (SELECT v.FVoucherID, convert(char(10),v.FDate,121) FDate,v.Fyear,v.Fperiod,v.FNumber,v.FEntryCount,v.FDebitTotal, v.FChecked, v.FPreparerID,u1.FName as FPreparer,v.FCheckerID,u2.FName as FChecker,e.FAccountID, a.FNumber FAccountNumber, a.FName as FAccountName, e.FDetailID,e.FDC, e.FAmount, e.FQuantity, e.FUnitPrice, e.FExplanation,e.FEntryID FROM '+ @FBrnoName+'..t_Voucher v With (Readpast) INNER JOIN '+@FBrnoName+'..t_VoucherEntry e WITH (Readpast) ON v.FVoucherID=e.FVoucherID INNER JOIN '+@FBrnoName+'..t_Account a ON e.FAccountID=a.FAccountID Left outer join '+@FBrnoName+'.. t_Account a1 ON e.FAccountID2=a1.FAccountID Left outer join '+@FBrnoName+' ..t_User u1 on v.FPreparerID = u1.FUserID Left outer join '+@FBrnoName+' ..t_User u2 on v.FCheckerID = u2.FUserID WHERE v.Fdate > ='+@Fdate1+' And v.Fdate <='+@Fdate2+' AND a.Fnumber > ='+@FAccountNumber1+' And a.Fnumber <= '+@FAccountNumber2+')a') select * form #temp1go