SQL 代码从 Excel 文档复制/粘贴,没有可见错误,将不会执行
SQL code copy / pasted from Excel document,with no visible errors, will not execute
我正在使用本网站的代码(直到第一个 case 语句结束)-
http://www.sqlusa.com/bestpractices2005/abbreviation/
DECLARE @StateCode char(2)
SET @StateCode = 'TX'
SELECT 'State name from state code' =
CASE
WHEN @StateCode = 'AK' THEN 'ALASKA'
WHEN @StateCode = 'AL' THEN 'ALABAMA'...
...WHEN @StateCode = 'WV' THEN 'WEST VIRGINIA'
WHEN @StateCode = 'WY' THEN 'WYOMING'
ELSE '' END
GO
如果我从网站直接复制/粘贴到 SSMS 中,这段代码 运行 没问题。
如果我将此代码(从网站)复制/粘贴到 Excel,然后从 Excel 复制/粘贴到 SSMS,代码将不再 运行 即使它与原始代码明显相同。 SSMS 在整个代码中都出现了语法错误。
问题似乎与 space (" ") 个字符有关;如果将所有 "space characters" 替换为 "real" space,错误将消失并且代码将 运行 正确。
为什么会这样?
SELECT
语句有一个小问题。你可以重写为
SELECT 'State name from state code' + ' =' +
CASE
WHEN @StateCode = 'AK' THEN 'ALASKA'
WHEN @StateCode = 'AL' THEN 'ALABAMA'
WHEN @StateCode = 'WV' THEN 'WEST VIRGINIA'
WHEN @StateCode = 'WY' THEN 'WYOMING'
ELSE NULL END AS Mycolumn
从 excel 复制可以在文本中引入不间断的 space。取一个显示为错误的 "spaces" 并用常规 space.
进行查找替换
从Excel粘贴时,我总是在两者之间使用记事本(实际上我使用NotePad++)。 Excel 似乎总是添加垃圾。将您的代码粘贴到记事本中,看看是否有任何奇怪的字符或奇怪的间距。然后将其删除并将您的代码表粘贴到那里。
在 Excel 中存储内容时,复制的最佳做法是将需要复制的文本复制到 select 单元格,然后从公式栏复制,而不是直接从单元格复制。在单元格中存储数据时 Excel 添加了一些不可见的字符:换行符等
最终答案是空格 (ascii 32) 被 non-breaking 空格 (ascii 160) 替换。一旦 non-breaking 空格被正确替换为代码 运行。
这里还有一些链接可以用来测试这个,它会告诉你一个字符是哪个 ascii 值
我正在使用本网站的代码(直到第一个 case 语句结束)-
http://www.sqlusa.com/bestpractices2005/abbreviation/
DECLARE @StateCode char(2)
SET @StateCode = 'TX'
SELECT 'State name from state code' =
CASE
WHEN @StateCode = 'AK' THEN 'ALASKA'
WHEN @StateCode = 'AL' THEN 'ALABAMA'...
...WHEN @StateCode = 'WV' THEN 'WEST VIRGINIA'
WHEN @StateCode = 'WY' THEN 'WYOMING'
ELSE '' END
GO
如果我从网站直接复制/粘贴到 SSMS 中,这段代码 运行 没问题。
如果我将此代码(从网站)复制/粘贴到 Excel,然后从 Excel 复制/粘贴到 SSMS,代码将不再 运行 即使它与原始代码明显相同。 SSMS 在整个代码中都出现了语法错误。
问题似乎与 space (" ") 个字符有关;如果将所有 "space characters" 替换为 "real" space,错误将消失并且代码将 运行 正确。
为什么会这样?
SELECT
语句有一个小问题。你可以重写为
SELECT 'State name from state code' + ' =' +
CASE
WHEN @StateCode = 'AK' THEN 'ALASKA'
WHEN @StateCode = 'AL' THEN 'ALABAMA'
WHEN @StateCode = 'WV' THEN 'WEST VIRGINIA'
WHEN @StateCode = 'WY' THEN 'WYOMING'
ELSE NULL END AS Mycolumn
从 excel 复制可以在文本中引入不间断的 space。取一个显示为错误的 "spaces" 并用常规 space.
进行查找替换从Excel粘贴时,我总是在两者之间使用记事本(实际上我使用NotePad++)。 Excel 似乎总是添加垃圾。将您的代码粘贴到记事本中,看看是否有任何奇怪的字符或奇怪的间距。然后将其删除并将您的代码表粘贴到那里。
在 Excel 中存储内容时,复制的最佳做法是将需要复制的文本复制到 select 单元格,然后从公式栏复制,而不是直接从单元格复制。在单元格中存储数据时 Excel 添加了一些不可见的字符:换行符等
最终答案是空格 (ascii 32) 被 non-breaking 空格 (ascii 160) 替换。一旦 non-breaking 空格被正确替换为代码 运行。
这里还有一些链接可以用来测试这个,它会告诉你一个字符是哪个 ascii 值