在 SQL 中添加一个具有特殊字符的列?
Add a column in SQL with a special character?
我知道这是不好的做法,但目前的情况需要一个特殊字符(升号 s = ß)作为列名。如何编写 SQL 查询来添加具有特殊字符的列?使用 SSMS 它会添加 Straße
但是当我 运行 通过外部程序使用 sqlcmd.exe
查询 SQL 时它会添加 Straße
.
这是脚本:
DECLARE @Street varchar(50)='Straße';
IF NOT EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'@Street'
AND Object_ID = Object_ID(N'Document'))
BEGIN
EXECUTE
(
'ALTER TABLE dbo.Document ADD ' +
@Street + ' varchar(50) NULL
')
END
您需要使用 nvarchar
而不是 varchar
:
DECLARE @Street sysname = N'Straße'; --synonym for nvarchar(128) NOT NULL
IF NOT EXISTS(SELECT 1 FROM sys.columns
WHERE Name = @Street --This shouldn't be a literal string
AND Object_ID = Object_ID(N'Document'))
BEGIN
DECLARE @SQL nvarchar(MAX);
SET @SQL - N'ALTER TABLE dbo.Document ADD ' QUOTENAME@(Street) + N' varchar(50) NULL;';
--Should the column be an nvarchar too, considering it's name?
EXEC sys.sp_executesql @SQL;
END;
我知道这是不好的做法,但目前的情况需要一个特殊字符(升号 s = ß)作为列名。如何编写 SQL 查询来添加具有特殊字符的列?使用 SSMS 它会添加 Straße
但是当我 运行 通过外部程序使用 sqlcmd.exe
查询 SQL 时它会添加 Straße
.
这是脚本:
DECLARE @Street varchar(50)='Straße';
IF NOT EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'@Street'
AND Object_ID = Object_ID(N'Document'))
BEGIN
EXECUTE
(
'ALTER TABLE dbo.Document ADD ' +
@Street + ' varchar(50) NULL
')
END
您需要使用 nvarchar
而不是 varchar
:
DECLARE @Street sysname = N'Straße'; --synonym for nvarchar(128) NOT NULL
IF NOT EXISTS(SELECT 1 FROM sys.columns
WHERE Name = @Street --This shouldn't be a literal string
AND Object_ID = Object_ID(N'Document'))
BEGIN
DECLARE @SQL nvarchar(MAX);
SET @SQL - N'ALTER TABLE dbo.Document ADD ' QUOTENAME@(Street) + N' varchar(50) NULL;';
--Should the column be an nvarchar too, considering it's name?
EXEC sys.sp_executesql @SQL;
END;