Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL表名与字符串和@parameter连接_Sql_Sql Server_Tsql - Fatal编程技术网

T-SQL表名与字符串和@parameter连接

T-SQL表名与字符串和@parameter连接,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想在@sql执行之前对其进行计数。但我无法将表名与参数值连接起来 SQL: 如何做到这一点?只需将@sql参数中的所有内容作为 declare @sql navarchar(max) set @sql = 'declare @count int SET @count = (SELECT count(*) as tblcount FROM RDL_tbl_UserManagement_UserInfo_'+@table_prefix_name+' WHERE partnerID='+cast

我想在@sql执行之前对其进行计数。但我无法将表名与参数值连接起来

SQL:


如何做到这一点?

只需将@sql参数中的所有内容作为

declare @sql navarchar(max)
set @sql = 
'declare @count int 
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
                    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           
                    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 sp_executesql @sql

也许是动态SQL?然而,可能有更好的选择您应该始终为在
CAST
CONVERT
语句中使用的任何
varchar
提供长度!
declare @sql navarchar(max)
set @sql = 
'declare @count int 
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
                    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           
                    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 sp_executesql @sql
 declare @count int
  SET @sql = 'SELECT @count =count(*) 
          FROM RDL_tbl_UserManagement_UserInfo_'+@table_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)