在sql server中执行sql字符串
我的代码如下所示,不知怎的,@Name附近总是有一个错误在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声明中添加一个引号,只需删除其中的哈希:
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;