2017-05-02 147 views
0
SET NOCOUNT ON; 

DECLARE @sql NVARCHAR(MAX) 

--,@DBName    VARCHAR(30) 
--SET @jobNumber=417133 
--SELECT @DBName = DataBaseName,'tdis', @server = '[' + isnull(server,'s-portaldb1') + ']' 
--from tdLogging.dbo.tblJobDbLookup where jobnumber = @jobNumber 
DROP TABLE #Actual 

CREATE TABLE #Actual (
    jobnumber INT 
    ,firstNameCounts VARCHAR(25) 
    ,lastNameCounts VARCHAR(25) 
    ,address1Counts VARCHAR(25) 
    ,address2Counts VARCHAR(25) 
    ,cityCounts VARCHAR(25) 
    ,stateCounts VARCHAR(25) 
    ,zipCounts VARCHAR(25) 
    ,inHomeDateCounts VARCHAR(25) 
    ) 

SET @sql = 'INSERT INTO #actual (jobnumber,firstNameCounts,lastNameCounts , address1Counts, address2Counts, cityCounts, stateCounts, zipCounts, inHomeDateCounts) ' 
SET @sql = @sql + ' Select s.jobnumber, count(s.firstName) AS [firstNameCounts], Count (s.lastName) AS [lastNameCounts], Count (s.Address1) As [address1Counts], Count (s.address2)-Count (address2) AS ' 
SET @sql = @sql + ' [address2Counts], Count (s.City) AS [cityCounts], Count (s.State) AS [stateCounts], Count (s.Zip) AS [zipCounts], Count (jb.inHomeDate) AS [inHomeDateCounts] ' 
SET @sql = @sql + ' From [s-portaldb1].[tdis_417133].[dbo].[tblStandardFinal] s ' 
SET @sql = @sql + ' INNER JOIN [s-printstream].[tdSchedule2].[dbo].[tblJobTicketActions] jb ' 
SET @sql = @sql + ' ON jb.psFlagJobNumber = s.jobNumber ' 
SET @sql = @sql + ' where jobNumber = @jobNumber ' 
SET @sql = @sql + ' group by jobNumber ' 

PRINT @SQL 

EXEC sp_executesql @sql 
    ,N'@JobNumber Varchar(25)' 
    ,@JobNumber = 417133; 

SELECT * 
FROM #Actual 

我试图让此代码动态运行,并且我想让“[s-portaldb1]。[tdis_417133]”在运行时动态地出现。如何使服务器名称和数据库名称动态

任何帮助将不胜感激。谢谢

回答

0

不知道我知道“来运行”的意思,但如果你想使你的动态SQL服务器名称动态,只需添加一个参数,为您的服务器名称,然后引入到您的SQL使用类似以下内容:

DECLARE @ServerName varchar(100) = '[s-portaldb1].[tdis_417133]' 

SET @sql = @sql + ' From ' + @Servername + '.[dbo].[tblStandardFinal] s ' 
+0

这就是我正在寻找的,我会尝试实现,看看如何工作.. – Zaib