2014-10-01 31 views
0

我想在执行之前获取我的@sql的计数。但是我无法连接表名和我的参数值。T-SQL表名与字符串和@parameter连接

SQL:

SET @count = (SELECT count(*) as tblcount 
       FROM RDL_tbl_UserManagement_UserInfo_ + @table_prefix_name 
       WHERE partnerID = CAST(@partnerID AS VARCHAR) 
       AND userID = CAST(@adminUserID AS VARCHAR) 
       AND addressType = 'H') 

IF @count = 0 
BEGIN 
    SET @sql = 'SELECT * FROM RDL_tbl_UserManagement_UserInfo_' + @table_prefix_name + 
       ' WHERE partnerID = ' + CAST(@partnerID AS VARCHAR) + 
       ' AND userID = ' + CAST(@adminUserID AS VARCHAR) + 
       ' AND addressType= ''MZ'' ORDER BY company' 
END 
ELSE 
BEGIN   
    SET @sql = 'SELECT * FROM RDL_tbl_UserManagement_UserInfo_' + @table_prefix_name + 
       ' WHERE partnerID = ' + CAST(@partnerID AS VARCHAR) + 
       ' AND userID = ' + CAST(@adminUserID AS VARCHAR) + 
       ' AND addressType=''H'' ORDER BY company' 
END 

Exec (@sql) 

如何做到这一点?

+0

动态SQL,也许?不过,可能有更好的选择。 – Tim 2014-10-01 05:10:14

+0

[不良习惯踢:使用VARCHAR无(长度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length .aspx) - 你应该总是**为你在'CAST'或'CONVERT'语句中使用的'varchar'提供一个长度! – 2014-10-01 05:13:11

回答

1
declare @count int 
    SET @sql = 'SELECT @count =count(*) 
      FROM RDL_tbl_UserManagement_UserInfo_'[email protected]_prefix_name +' 
      WHERE partnerID = CAST(@partnerID AS VARCHAR) 
      AND userID = CAST(@adminUserID AS VARCHAR) 
      AND addressType = ''H'')' 

EXEC sp_executesql @sql, N'@count int OUTPUT', 
        @count OUTPUT 

IF @count = 0 
BEGIN 
SET @sql = 'SELECT * FROM RDL_tbl_UserManagement_UserInfo_' + @table_prefix_name + 
      ' WHERE partnerID = ' + CAST(@partnerID AS VARCHAR) + 
      ' AND userID = ' + CAST(@adminUserID AS VARCHAR) + 
      ' AND addressType= ''MZ'' ORDER BY company' 
END 
ELSE 
BEGIN   
SET @sql = 'SELECT * FROM RDL_tbl_UserManagement_UserInfo_' + @table_prefix_name + 
      ' WHERE partnerID = ' + CAST(@partnerID AS VARCHAR) + 
      ' AND userID = ' + CAST(@adminUserID AS VARCHAR) + 
      ' AND addressType=''H'' ORDER BY company' 
END 

Exec (@sql) 
0

只要把一切都在你的@sql参数作为

declare @sql navarchar(max) 
set @sql = 
'declare @count int 
SET @count = (SELECT count(*) as tblcount FROM RDL_tbl_UserManagement_UserInfo_'[email protected]_prefix_name+' WHERE partnerID='+cast(@partnerID as varchar)+' AND userID='+cast(@adminUserID as varchar)+' AND addressType=''H'') 
IF @count = 0 
       BEGIN 
        SELECT * FROM RDL_tbl_UserManagement_UserInfo_'[email protected]_prefix_name+' WHERE partnerID='+cast(@partnerID as varchar)+' and userID='+cast(@adminUserID as varchar)+' AND addressType=''MZ'' ORDER BY company 
       END 
      ELSE 
       BEGIN   
        SELECT * FROM RDL_tbl_UserManagement_UserInfo_'[email protected]_prefix_name+' WHERE partnerID='+cast(@partnerID as varchar)+' and userID='+cast(@adminUserID as varchar)+' AND addressType=''H'' ORDER BY company 
       END 
' 
Exec sp_executesql @sql