我知道这是不好的做法,但是当前情况需要使用特殊字符(sharp 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;