动态执行sql

EXEC必须是##全局临时表,拼接sql时必须变int或者long转换成字符串(cast as nvarchar(50))

DECLARE @bossSql NVARCHAR(200)
IF (SELECT  COUNT(*)
FROM    dbo.ST_Users U WITH ( NOLOCK )
        INNER JOIN dbo.BS_Enterprise E WITH ( NOLOCK ) ON U.EnteID = E.EnteID
                                                          AND U.UserID = E.iPreparedBy
WHERE   E.EnteID = 1364317
        AND UserID = 41629
        AND U.UserID = U.iPreparedBy
        AND U.bUse = 0)>0
        BEGIN
            SET @bossSql=' AND P.EnteID='+CAST(1364317 AS NVARCHAR(50))
        END
ELSE
    BEGIN
        SET @bossSql=' AND P.PondID IN (SELECT U.PondID FROM dbo.ST_UsersRange U WHERE U.bUse=0 AND U.UserID='+CAST(41629 AS NVARCHAR(50))+')'+' AND P.EnteID='+CAST(1364317 AS NVARCHAR(50))
    END 
IF OBJECT_ID(N'tempdb..##pond') IS NOT NULL DROP TABLE ##pond

EXEC('SELECT P.PondID,P.cPondNubmer INTO ##pond FROM dbo.BS_FishPond P
WHERE P.bUse=0'+@bossSql)



IF OBJECT_ID(N'tempdb..#batch') IS NOT NULL DROP TABLE #batch
SELECT B.RecordID,B.PondID,B.dStartDate,B.dEndDate,B.cBatchNumber,P.cPondNubmer INTO #batch FROM ##pond P
INNER JOIN dbo.MS_BatchManage B ON P.PondID=B.PondID

SELECT B.RecordID,CAST(B.PondID AS NVARCHAR(20)) PondID,B.dStartDate,B.dEndDate,B.cBatchNumber,B.cPondNubmer FROM
(SELECT MAX(B.RecordID) RecordID FROM #batch B
GROUP BY B.PondID) temp
INNER JOIN #batch B ON temp.RecordID=B.RecordID
ORDER BY B.RecordID

IF OBJECT_ID(N'tempdb..##pond') IS NOT NULL DROP TABLE ##pond

 

posted @ 2016-11-24 17:34  wjl910  阅读(107)  评论(0)    收藏  举报