在sql server中执行sql字符串

在sql server中执行sql字符串,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的代码如下所示,不知怎的,@Name附近总是有一个错误 在@Name声明中添加一个引号,只需删除其中的哈希: DECLARE @Name nvarchar(MAX)='(''mm.dll'', ''ben and jerry.exe'')' DECLARE @sql nvarchar(MAX)= 'SELECT OrderName, customer.version, count(DISTIN

我的代码如下所示,不知怎的,@Name附近总是有一个错误


在@Name声明中添加一个引号,只需删除其中的哈希:

DECLARE @Name nvarchar(MAX)='(''mm.dll'', ''ben and jerry.exe'')'
DECLARE @sql nvarchar(MAX)= 
       'SELECT 
              OrderName,
              customer.version,
              count(DISTINCT company.CID) as Counts
        FROM [CompanyData] company
        INNER JOIN [vendor] mav on company.CID = mav.CID
        LEFT OUTER JOIN [Customer] customer on company.VendorId = customer.VendorId    
             AND company.DId = customer.DId
        WHERE OrderName in ' + @Name+ '
        GROUP BY customer.version, OrderName'

EXEC sp_executesql @sql

请在字符串@name中添加双单qoute

 DECLARE @Name nvarchar(MAX)  =  '(sally''s order, ben and jerry)'
 DECLARE @sql nvarchar(MAX)= 'SELECT OrderName,
 customer.version,
  count(DISTINCT company.CID) as Counts
 FROM [CompanyData] company
 INNER JOIN [vendor] mav on company.CID = mav.CID
 LEFT OUTER JOIN [Customer] customer on company.VendorId = customer.VendorId       
 AND company.DId = customer.DId
 WHERE OrderName in' + @Name+ '
 GROUP BY  
 customer.version, OrderName'

 EXEC sp_executesql @sql

请在@Name变量中添加双引号,如

DECLARE @Name nvarchar(MAX)  =  '("mm.dll", "ben and jerry.exe")'

如果将名称存储到表值中,可能会为您省去很多痛苦

DECLARE @a varchar(max) = 'Jerry.ede';    
DECLARE @b varchar(max) = 'Sa''ra';    
DECLARE @c varchar(max) =  '(''mm.dll''),(''ben and jerry.exe'')';

DECLARE @Names TABLE (name nvarchar(MAX));

INSERT INTO names values (@a),(@b);
EXEC sp_executesql N'INSERT INTO names values ' + @c;

SELECT OrderName,
   customer.version,
   count(DISTINCT company.CID) as Counts
FROM [CompanyData] company
  INNER JOIN [vendor] mav on company.CID = mav.CID
  LEFT OUTER JOIN [Customer] customer on company.VendorId = customer.VendorId AND company.DId = customer.DId
WHERE OrderName in (SELECT name from @names)
  GROUP BY  
         customer.version, OrderName;

您好@Rigel1121谢谢您的及时回复。但我不认为这是因为“因为数据实际上是伪造的,即使没有“就像苹果和梨一样,橙色”也不能很好地工作。我想问题可能是我连接sql字符串的方式。我已经编辑了我的答案。因为WHERE子句中的值是字符串,所以不要忘记将它们括在单引号中。查看并尝试我编辑的答案。谢谢!由于我的实际数据存在错误,因此这次错误会发生变化。在每个值中,例如“mm.dll”,因此错误似乎是相同的。我必须逃跑吗。在sql中也是这样吗?在这种情况下我该怎么做?我改变了我的价值观。很抱歉让你这么困惑Thx!但我认为我的实际问题并不是因为。。请参见上面相应的更改
DECLARE @a varchar(max) = 'Jerry.ede';    
DECLARE @b varchar(max) = 'Sa''ra';    
DECLARE @c varchar(max) =  '(''mm.dll''),(''ben and jerry.exe'')';

DECLARE @Names TABLE (name nvarchar(MAX));

INSERT INTO names values (@a),(@b);
EXEC sp_executesql N'INSERT INTO names values ' + @c;

SELECT OrderName,
   customer.version,
   count(DISTINCT company.CID) as Counts
FROM [CompanyData] company
  INNER JOIN [vendor] mav on company.CID = mav.CID
  LEFT OUTER JOIN [Customer] customer on company.VendorId = customer.VendorId AND company.DId = customer.DId
WHERE OrderName in (SELECT name from @names)
  GROUP BY  
         customer.version, OrderName;